안녕하세요. Transaction log에 대해 궁금한 점이 있어서 질문 드립니다.
일반적으로 Transaction log는 데이터 롤백이나 에러에 대비해서 수행한 쿼리에 대한 정보가 담긴다고 배웠습니다.
이번에 대량의 데이터를 Delete 해야되는 상황이 발생해서(약 5억건)
여러 방법을 생각해보다 while 문으로 1000건씩 삭제하는 방법을 사용 해봤는데요
제 생각엔 한번에 100만건을 지우나 1000건씩 1000번을 반복하여 100만건을 지우나 Transaction log의 사이즈는 똑같을거라 생각했는데
1000건씩 while로 지우니 거의 커지지 않더라구요
혹시 왜 한번에 지우는 것과 쪼개서 지우는 것 두가지 방법에 따라 로그 사이즈가 다른건지 알 수 있을까요?
감사합니다
일반적으로 Transaction log는 데이터 롤백이나 에러에 대비해서 수행한 쿼리에 대한 정보가 담긴다고 배웠습니다.
이번에 대량의 데이터를 Delete 해야되는 상황이 발생해서(약 5억건)
여러 방법을 생각해보다 while 문으로 1000건씩 삭제하는 방법을 사용 해봤는데요
제 생각엔 한번에 100만건을 지우나 1000건씩 1000번을 반복하여 100만건을 지우나 Transaction log의 사이즈는 똑같을거라 생각했는데
1000건씩 while로 지우니 거의 커지지 않더라구요
혹시 왜 한번에 지우는 것과 쪼개서 지우는 것 두가지 방법에 따라 로그 사이즈가 다른건지 알 수 있을까요?
감사합니다
Comment 3
-
르매
2017.10.30 16:03
-
이리
2017.10.30 16:41
만약 FULL 이시라면 반복문 앞에 명시적 TRANSACTION 있고 없고에 따라 로그 사이즈가 달라집니다.
그리고 나눠서 작업하는 경우는 TABLE LOCK 방지때문이죠..
-
tempest
2017.10.30 17:06
복구 모델은 확인해보니 FULL 입니다.
말씀하신대로 테이블 락 때문에 잘개 쪼갰고
트랜잭션 로그 파일이 있는 스토리지가 위험하지 않을정도로만 반복하도록 반복 회수를 정해놓고 돌려봤습니다.
예상과는 달리 한번의 트랜잭션을 반복하면서 늘어나는 양 이상은 늘지 않는걸로 보이길래
그래서 왜 그런건지 궁금 했었습니다.
복구모델 심플일 때 한번의 트랜잭션이 수행될 때 만큼의 로그 사이즈가 필요한건 처음 알았습니다. 감사합니다!
Recovery Model이 SIMPLE 인 상태인가 보군요.
만약 FULL 을 사용한다면 트랜잭션 로그를 백업 받지 않는한 로그 파일은 계속 커집니다.
이 경우, 어떤 방식으로 지우더라도 5억건을 삭제하면서 생성되는 트랜잭션 로그를 담을 공간이 필요합니다.
물론 로그 파일이 설정한 규칙대로 증가하겠죠. (10%씩이던 일정 크기 만큼이던...)
하지만 SIMPLE 을 사용하고 있다면, 로그 파일의 사이즈는 딱 한 번의 트랜잭션을 완료하는데 쓰이는 로그 공간만 필요합니다.
while 루프에서 1000건을 지운다면 1000건의 삭제 트랜잭션을 담을 공간이.. 100만건을 지운다면 100만건의 삭제 트랜잭션을 담을 공간이 필요한데.. 둘 다 삭제가 완료되면 트랜잭션 로그도 삭제되므로.. 더 이상 트랜잭션 로그 파일의 사이즈가 증가하지 않겠죠.