SQL Server 2016에서 테이블 데이터 제거 성능 튜닝
Aug 15 2020
메인 테이블에서 아카이브로 엄청난 양의 데이터 제거를 자동화해야합니다.
내가 따르는 단계 :
메인 테이블의 데이터를 아카이브 테이블에 삽입하고 있습니다.
두 테이블의 개수를 교차 확인한 후 기본 테이블에서 데이터를 삭제합니다.
위험 : 삭제 문은 정지 상태가 될 수 있으며 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에 대한 인덱스가 있는지 확인합니다. 테이블 수준 잠금을 피하고 싶을 것입니다.