다음을 통해 공유


큰 개체 삭제 및 다시 작성

큰 인덱스를 삭제하거나 다시 작성할 때 또는 큰 테이블을 삭제하거나 자를 때 SQL Server 2005 데이터베이스 엔진은 트랜잭션이 커밋될 때까지 실제 페이지 할당 취소와 관련 잠금을 지연시킵니다. 이러한 구현은 다중 사용자 환경에서 자동 커밋 트랜잭션과 명시적 트랜잭션을 모두 지원하며 익스텐트를 129개 넘게 사용하는 큰 테이블이나 인덱스에 적용됩니다.

데이터베이스 엔진은 프로세스를 논리적 단계와 물리적 단계의 두 단계로 나눠 큰 개체를 삭제하는 데 필요한 할당 잠금을 피합니다.

논리적 단계에서는 테이블이나 인덱스에 사용되는 기존 할당 단위가 할당 취소로 표시되고 트랜잭션이 커밋될 때까지 잠깁니다. 클러스터형 인덱스가 삭제되면 데이터 행이 복사되어 다시 작성된 클러스터형 인덱스나 힙을 저장하기 위해 생성된 새 할당 단위로 이동됩니다. 또한 인덱스 다시 작성의 경우 데이터 행이 정렬됩니다. 롤백이 있으면 이 논리 단계만 롤백해야 합니다.

물리적 단계는 트랜잭션 커밋 후 발생합니다. 할당 취소로 표시된 할당 단위가 일괄 작업을 통해 물리적으로 삭제됩니다. 이러한 삭제 작업은 백그라운드에서 발생하는 짧은 트랜잭션 내에서 처리되며 많은 잠금을 필요로 하지 않습니다.

물리적 단계는 트랜잭션 커밋 후 발생하므로 테이블이나 인덱스의 저장 공간이 여전히 사용할 수 없는 것으로 나타날 수 있습니다. 물리적 단계가 완료되기 전에 데이터베이스가 증가하는 데 이 공간이 필요하면 데이터베이스 엔진이 할당 취소로 표시된 할당 단위로부터 공간을 복구하려고 합니다. 이러한 할당 단위에서 현재 사용하고 있는 공간을 찾으려면 sys.allocation_units 카탈로그 뷰를 사용합니다.

지연된 삭제 작업은 할당된 공간을 바로 해제하지 않아 데이터베이스 엔진에 추가 오버헤드 비용을 초래합니다. 따라서 128개 이하의 익스텐트를 사용하는 테이블과 인덱스는 SQL Server 2000과 동일한 방식으로 삭제되고 잘리고 다시 작성됩니다. 즉, 논리적 단계와 물리적 단계가 모두 트랜잭션 커밋 전에 발생합니다.

참고 항목

개념

관련 자료