전산팀에서 근무 중입니다.
특정 테이블의 데이터 건수가 20억건 정도가되는데 용량이 약500G정도 됩니다. 프로세스적으로 잘못된부분을 찾아서 불필요하게 데이터를 쌓아가는 로직을 찾아서 개선하였고 기존에 누적된 데이터 또한 불필요한 내역은 삭제하려고 합니다.
문제는 20억건의 데이터 중에 20%정도를 삭제하게되는데, 단순 Delete를 통해서 삭제하는것은 시간이 너무 오래 걸리며, 시간을 들여서 삭제를 한다고해서 삭제한 만큼 용량이 줄어드는것이 아니라 추가적인 작업을 진행하여야만 용량이 줄어든다고 알고있습니다.
이처럼 대용량으로 삭제를 할 경우 어떻게 진행하는 것이 효율적이며 정상적으로 사용중 용량을 감소시키기 위해서 어떠한 절차가 올바른지 전문가 분들의 노하우를 공유 부탁드립니다.
Comment 1
-
건우아빠
2015.09.23 16:31
20억 중 20%면 4억 건을 지우신다면 문제가 발생하겠죠..
일정 갯수 만큼씩 지우는 방법으로 하시면
1초에 1000건씩 지우는 루틴으로 가면 112시간(4.6일) 정도 걸리겠죠... 실제 지우는 시간은 측정해보세요...
set rowcount 1000
while 1 = 1
begin
WAITFOR DELAY '00:00:01';
delete filelist
end
디비 화일 축소... http://www.sqler.com/635232
SHRINKFILE
DBCC SHRINKFILE('mdf논리적이름', 1000)
DBCC SHRINKFILE('ldf논리적이름', 1000)
모든 작업은 일단 백업은 받고 시작 하세요..