SQL Server 2008에서는 삭제해야 할 수백만 개의 데이터 행이 있습니다. 그들은 한 줌의 테이블에 흩어져 있습니다. 삭제는 느려지는 방법이라고 생각하는 최대 20 초가 걸립니다! 삭제할 데이터는 timestamp
열로 식별됩니다. 다음은 지금까지 최적화를 위해 수행 한 작업입니다.데이터웨어 하우스 데이터에서 많은 행을 빠르게 삭제
- 격리 수준
read uncommitted
을 사용하십시오. 나는 거래를 신경 쓰지 않는다. 실패 할 경우 사용자는 삭제 작업을 다시 실행합니다. 그리고 새로운 데이터는timestamp
을 삭제하지 않도록 보장됩니다. - 상위 테이블보다 리프 테이블을 삭제하는 중입니다.
timestamp
열은 PK 클러스터 된 인덱스의 일부로, 실제로는 PK/인덱스의 첫 번째 위치입니다.- 각 테이블은 트랜잭션 로그 오버 헤드를 줄이기 위해 상위 200000 개 항목을 삭제하는 루프를 사용하여 비 웁니다.
- 어느 I/O 나 CPU는 무엇 내가 간과 한 서버
에 끝나가는 무엇입니까?
또한 PK의 첫 번째 위치로 타임 스탬프 열을 이동하는 효과에 의문이 있습니다. 그렇게 한 후에는 테이블을 재구성하거나 SQL Server에서이 작업을 수행 할 수있을만큼 똑똑해야합니다. 클러스터 된 인덱스에 대한 나의 이해는 행의 실제 레이아웃을 정의하기 때문에 데이터를 재구성해야한다는 것입니다. 그러나 우리는 클러스터 된 인덱스 작업을 변경하는 데 오랜 시간이 걸린다는 고객의 불만이 없습니다.
왜 이러한 요구를 수행합니다
create table myTable (ID int PRIMARY KEY)
그 외에도, 성능에 도움이됩니다 "옵션 (재 컴파일)"를 추가하려고하시기 바랍니다 빨리 될까? 파티셔닝을 고려 했습니까? – Mat
필자의 이해로는 몇 초가 걸리는 삭제 작업이 잘못되었다는 것이 었습니다. 따라서 제 생각은 제가 간과 한 것입니다. –
삭제는 비용이 많이 드는 작업입니다. 수백만 줄의 20 대가 그것의 얼굴에 "틀린"것 같지는 않습니다. – Mat