본문 바로가기

SQL/도움말 팁들!

대용량 INSERT .. SELECT 작업 중 중지했을 때 대처 방안

8천만 건 정도의 Row를 가진 테이블을 가지고 작업 중에 난관에 봉착했다!

target_table을 TRUNCATE 하고, 인덱스를 재정비 한 후,
INSERT INTO target_table SELECT * FROM source_table 작업을 했는데 예상보다 시간이 너무 오래걸리는 것이다..
8천만 건 넘기는데 대략 40시간..... OTL... (SELECT INSERT했을 때는 11분 정도 걸려서 너무 가볍게 봐버렸건 거다..)

하는 수 없이 SELECT INSERT 하고 인덱스 작업을 하는 것이 나을거라 판단하여, 기존 트랜젝션을 중지시켰는데,
이것이 죽질 않는다.. 강제로 죽여봤는데도 데이터는 계속 쌓여만 가네? 어라?

sp_who 를 해보니 세션이 그대로 살아서 INSERT 작업을 진행중...
해당 프로세스를 죽이려고 KILL spid 실행하니 cmd 가 INSERT 에서 KILLED/ROLLBACK 으로 나온다..
다시 이걸 죽이려고 KILL spid 를 하니

SPID 89: 트랜잭션 롤백이 진행 중입니다. 예상 롤백 완료율은 91%, 남은 시간은 281초입니다

이렇게 나오네..

결론은 롤백이 다 될때까지 기다렸다는 것... 다행히도 롤백 진행률과 남은시간이 표시되어 안심이 되었음..
모를 때 함부로 덤비지 맙시다 ^^
좋은 경험이었음!