none
몇십만개의 rows를 단순간에 삭제하려면?? RRS feed

  • 질문

  • delete
    from dbo.TownForecastPOP
    where date < convert(char, dateadd(dd, -2, getdate()), 112)

    위 쿼리를 사용하니 delete시 기간이 생각보다 오래 걸립니다.

    druncate를 사용하기에는 where 절이 지원되지 않기 때문에 불가능 하구요.

    몇십만개의 rows를 단순간에 로그 기록 없이 삭제하고 싶은대 어떻게 해야 하나요??


    장정훈

    2012년 7월 19일 목요일 오전 6:11

답변

  • 환경 설명이 없으니 자세한 답변이 어려워 원론적인 답변을 드립니다.

    DELETE 작업 성능에 영향을 줄 수 있는 요소들을 고려해 보고 필요한 것들을 적용해 보세요.

    - FROM 절에 WITH(TABLOCK) or WITH(PAGLOCK) 잠금 힌트 적용

    - 복구모델을 "단순", "대량모델" 변경해서 Log 량 줄이기 (작업 후 다시 "전체" 모델로 변경 후 백업 필요)

    - 테이블에 다른 인덱스 삭제 (작업 후 다시 재 생성)

    - 제약 조건 Disable (작업 후 Enable)

    - 삭제 데이터가 대략 전체 1% 내외인 경우 date 열에 인덱스 생성해서 작업

    - 혹은 delete 대신 나머지 데이터의 새로운 테이블 create & insert 고려

    등등입니다.

    도움이 되시길 바랍니다.


    Best Regards, Jungsun Kim

    2012년 7월 20일 금요일 오전 4:56
    중재자