반응형

앞에서 인덱스 조각화 확인 방법을 소개하였으므로, 이제는 인덱스 조각화를 제거하는 방법을 설명하겠습니다. 인덱스 조각화를 제거하는 방법에는 여러 가지가 있습니다. 인덱스를 재구성하거나 인덱스를 재작성하거나 인덱스를 삭제하고 다시 만드는 등의 여러 가지 방법이 가능합니다. SQL Server 2005에서 인덱스 조각화 제거 구문에 변경이 발생하였으므로, 이미 아시는 내용이겠지만 기본적인 내용을 살펴 보겠습니다.  

인덱스 다시 구성

 

ALTER INDEX 문에 REORGANIZE 절을 사용하면 인덱스를 다시 구성할 있습니다. SQL Server 2000에서의 DBCC INDEXDEFRAG 대신 기능을 사용하는 것을 권고합니다.

인덱스를 다시 구성하면 리프 노드의 논리적 순서(왼쪽에서 오른쪽으로) 일치하도록 리프 수준 페이지가 다시 정렬되어 테이블과 뷰의 클러스터형 비클러스터형 인덱스의 리프 수준이 조각 모음됩니다. 클러스터형 인덱스를 다시 구성하면 클러스터형 인덱스의 리프 수준에 포함된 모든 LOB 열이 압축됩니다. 비클러스터형 인덱스를 다시 구성하면 인덱스 내의 포괄 열인 모든 LOB 열이 압축됩니다.

sys.indexes 카탈로그 뷰의 채우기 비율 값을 기준으로 인덱스의 페이지를 압축하고, 압축으로 인해 생성된 페이지는 제거됩니다. 재구성은 온라인으로 수행되며, 차단 잠금을 오래 보유하지 않으므로 쿼리나 업데이트의 실행을 차단하지 않습니다.

인덱스가 심하게 조각화되지 않은 경우에는 인덱스를 재구성하면 되지만, 인덱스가 심하게 조각화된 경우에는 인덱스를 재작성하는 것이 좋습니다..

 

인덱스 재구성하기

USE AdventureWorks;

GO

ALTER INDEX PK_ProductPhoto_ProductPhotoID ON Production.ProductPhoto

REORGANIZE ;

GO

 

 

인덱스 다시 작성

 

인덱스 조각화로 인한 성능 저하를 방지하기 위해서는 주기적으로 인덱스 조각화가 진행된 테이블들에 대한 조각화 제거 작업이 필요합니다. 조각화를 제거하기 위한 작업 중의 하나가 인덱스를 다시 작성하는 것입니다. 인덱스 재작성은 인덱스를 삭제한 다시 생성하는 작업으로, 인덱스를 논리적 정렬과 일치하도록 물리적으로 재정렬합니다. 인덱스가 만들어졌을 지정된 FILLFACTOR 계산하여 인덱스의 페이지를 압축하여, 디스크 공간을 확보하고 필요한 만큼 페이지를 할당하여 인덱스 행을 연속되는 페이지에 다시 정렬합니다. 작업은 ALTER INDEX REBUILD 절을 사용하여 있으며, DBCC DBREINDEX 대신 기능을 사용하는 것을 권고합니다. 또한, CREATE INDEX DROP_EXISTING 절을 사용하여 인덱스 재작성 작업을 수도 있습니다. 작업을 통하여, 요청한 데이터를 얻는 필요한 페이지 읽기 횟수를 줄일 있으므로 디스크 성능이 향상됩니다.  ALL 명시하면 하나의 트랜잭션으로 테이블의 모든 인덱스를 제거하고 다시 작성합니다. SQL Server 2005에서는 비클러스터형 인덱스를 온라인으로 재작성할 있습니다.

가능한 인덱스 재작성 작업을 자동화하여 주기적으로 용이하게 수행할 있는 체계를 갖출 것을 권고합니다.

 

비클러스터형 인덱스를 온라인 모드로 재작성하기

ALTER INDEX IX_Employee_ManagerID ON HumanResources.Employee

REBUILD WITH (ONLINE=ON);

GO

 

반응형

+ Recent posts