sqlserver의 redo log file에 대한 원론적인 이해가 필요합니다...... 0 4 2,310

by 김혜니 [2019.04.22 10:44:02]


안녕하세요.

오라클의 경우 redo log file의 사이즈를 고정해두고, 여러개의 redo log file이 circular 방식으로 사용되잖아요...

헌데 sqlserver는 이 redo log file을 transaction log file이라고 칭하며 이 로그파일이 자동으로 사이즈가 늘어나는 방식이라고 알고있는데...

어떠한 장점때문에 이러한 방식을 사용하는 것 일가요?

 

제 생각에....... 오라클의 경우

리두로그 파일은 결국 데이터파일에 쓰여지게 되는 내용이고 (write ahead log 방식은 두 dbms모두 동일하다고 알고있습니다)

더이상 리두로그 보존의 필요가 없어지면 재사용해도 되기때문에 circular방식을 채택했다라는 아주 초보적인 생각을 갖고있는데,

sqlserver의 경우 transaction log file이 재사용되지 않는것인가요? 만약 재사용이 된다면 로그파일사이즈가 자동으로 증가되는 이유가 뭔가요..?

 

질문이 두서가 없는게, 제가 제대로 알지도 못하면서 질문을 드린다는 느낌이 드네요 ㅠ_ㅠ

답변 기다리면서 더 공부하겠습니다. 죄송합니다.

가닥이라도 잡아주신다면 감사드리겠습니다..

by 열심열심 [2019.04.22 14:39:28]

log파일은 복구를 위해 사용됩니다. 오라클도 아카이브 모드를 사용하면 sqlserver이랑 거의 같은 방식으로 사용됩니다. 

순환 된 리두로그 파일이 덮어쓰기 전에 아카이브 파일로 따로 저장 됩니다. 

재사용 때는 복구를 위해 사용 할 때 겠죠 

오라클 기본은 노아카이브 모드입니다. 


by 김혜니 [2019.04.22 15:27:25]

그럼 sqlserver의 트랜잭션로그파일은,

oracle의 archive log file과 유사한 용도라고 보면 될까요? (Redo log file이 아닌)

트랜잭션로그파일은, 오라클의 아카이브파일처럼 따로 관리(삭제)하지않으면 계속해서 쌓이는건지요. 


by 열심열심 [2019.04.23 18:43:51]

네 MSSQL도 예전 사용한 기억으론 

오라클 redolog파일처럼 트랜잭션로그파일 용량 제한이 가능해서 리두로그파일처럼 사용 가능합니다. 

 


by 르매 [2019.04.23 16:44:37]

MS-SQL 로그는 데이터의 모든 변경 사항이 기록되어 있으므로.. 오라클의 리두 로그에 대응하는 개념이 맞습니다.

다만, 트랜잭션 로그 파일이 항상 계속 커지는 것은 아닙니다. (물론 순환하지도 않지만요..) 이건 MS-SQL의 Recovery Model에 따라 다른데.. SIMPLE, Bulk Logged, FULL 이 있습니다.

- SIMPLE인 경우.. DML문이 실행되었을 때 트랜잭션이 커밋되면 트랜잭션 로그를 비웁니다. (시간이 지나도 로그 파일이 커지진 않지만, 대량 변경이 있으면 순간적으로는 커집니다. 하지만 커밋되면 다시 빈공간으로...)

- Bulk logged에서는.. 최소로깅 쿼리에 대해서는 로그를 남기지 않는 모드입니다. insert ~ select ~ 라던가, truncate table 같은 구문.. 저는 이 모델을 거의 안써봐서 백업/복구 규칙은 잘 모르겠군요.

- 마지막으로 FULL인 경우가 질문자께서 말씀하신 것처럼.. 로그 파일이 마냥 커지는 모델입니다. 주로 Production인 경우에 사용하고, 리두 로그이기 때문에 지정 시간 복구가 가능합니다. 이 경우에는.. 트랜잭션 로그를 백업했을 때 로그 파일이 사용하던 공간이 비게 됩니다.

참고로.. MS-SQL에서 트랜잭션 로그에 할당된 공간은 저절로 줄어들지 않습니다. 무슨 말이냐하면.. ldf 파일에 할당된 크기가 1GB인데 DML 실행이 많아서 2GB가 될 수 있는데, 트랜잭션 로그를 백업해서 비우더라도 ldf 파일의 크기는 계속 2GB라는 뜻입니다.

이유는 당연히 성능 때문이구요.. (디스크에 공간을 할당하는 것이 꽤 부하를 줍니다.)
임의로 줄이기 위한 shrink 명령이 따로 있습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입