아니요, 왜 느리게 실행되는지 확인할 수는 없지만 힌트를 줄 수는 있습니다.
1) SQL 2005에서 비 클러스터형 인덱스 관리는 스토리지 엔진 (팀)에서 쿼리 프로세서로 변경되었습니다. 여기에는 많은 부작용이 있으며 그 중 하나는 축소로 힙 데이터 페이지를 이동할 수있는 속도입니다. 모든 비 클러스터형 인덱스 레코드는 인덱싱중인 데이터 레코드에 대한 백 링크를 포함합니다. 힙의 경우 특정 데이터 페이지의 레코드 번호에 대한 물리적 링크입니다. 힙 데이터 페이지를 축소하여 이동하면 해당 페이지의 레코드로 백 링크되는 모든 비 클러스터형 인덱스 레코드를 페이지의 새 위치로 업데이트해야합니다. 2000 년에 이것은 저장소 엔진 자체에 의해 매우 효율적으로 수행되었습니다. 2005 년 이후에는 비 클러스터형 인덱스 레코드를 업데이트하기 위해 쿼리 프로세서를 호출하여이 작업을 수행해야합니다. 때로는 2000 년보다 최대 100 배 느립니다.
2) 행 외부 LOB 값 (실제 LOB 데이터 유형 또는 행 오버 플로우 데이터)에는 해당 데이터 또는 인덱스 레코드에 대한 백 링크가 포함되지 않습니다. LOB 레코드의 페이지가 이동 될 때, 어떤 데이터 / 인덱스 레코드가 자신을 가리키는 지 알아 내기 위해 이들이 속한 전체 테이블 또는 인덱스를 스캔하여 새 위치로 업데이트 할 수 있습니다. 이것은 또한 매우 느립니다.
3) 데이터베이스를 사용하는 다른 프로세스에서 축소가 페이지를 이동해야하는 잠금을 기다리는 것을 막을 수 있습니다.
4) 스냅 샷 격리를 사용하도록 설정했을 수 있으며 이전 버전이 필요한 트랜잭션이 완료 될 때까지 축소를 통해 버전 저장소 링크가있는 페이지를 이동할 수 없습니다.
5) I / O 하위 시스템에 전원이 부족할 수 있습니다. 낮은 한 자리수보다 높은 디스크 큐 길이는 병목 현상이 발생하는 I / O 하위 시스템을 의미합니다.
이들 중 일부 또는 전부가 런타임의 축소 속도 저하에 기여할 수 있습니다.
그러나 일반적으로 축소를 실행하고 싶지 않습니다. 자세한 내용은이 블로그 게시물을 참조하십시오. 데이터 파일을 축소해서는 안되는 이유 .
도움이 되었기를 바랍니다!