SQL Server 2016에서 테이블 데이터 제거 성능 튜닝

Aug 15 2020

메인 테이블에서 아카이브로 엄청난 양의 데이터 제거를 자동화해야합니다.

내가 따르는 단계 :

  1. 메인 테이블의 데이터를 아카이브 테이블에 삽입하고 있습니다.

  2. 두 테이블의 개수를 교차 확인한 후 기본 테이블에서 데이터를 삭제합니다.

위험 : 삭제 문은 정지 상태가 될 수 있으며 DB는 복구 모드가됩니다.

참고 : 라이브 트랜잭션 테이블이므로 기본 테이블에서 DDL 작업을 수행 할 수 없습니다. DML로 갈 수 있습니다.

  • 데이터베이스 : SQL Server 2016
  • OS : Windows 및 IIS

답변

4 MTay Aug 15 2020 at 15:58

DDL은 레코드 삭제 속도를 높이는 주요 방법 중 하나이지만 DDL은 옵션이 아니며 삭제 문에 대해 '정지 상태'에 직면하고 있다는 것을 알면 일괄 적으로 레코드를 삭제하는 것이 좋습니다.

link를 참조하십시오. 링크 를 기반으로 한 쿼리 예는 다음과 같습니다.

DECLARE @Batch INT = 1000
WHILE 1 = 1
BEGIN
    DELETE TOP (@Batch)
    FROM MyTable
    WHERE Date < ‘20200401’';
    IF @@ROWCOUNT < @Batch BREAK
END

이 경우 날짜별로 삭제할 때 SQL Server에서 해당 행만 빠르게 가져올 수 있도록 Date에 대한 인덱스가 있는지 확인합니다. 테이블 수준 잠금을 피하고 싶을 것입니다.