'인덱스 리빌드'에 해당되는 글 1건

  1. 2013.06.24 Index Fragmentation & Rebuild
MS SQL2013.06.24 15:17

 

[내용]

 

인덱스가 구성된 테이블에 대하여, 데이터 변경 작업 이나 데이터 입력으로 인하여 페이지 분할이 발생하여 인덱스 조각화가 발생하게 됩니다. 이러한 조각화는 인덱스를 사용한 조회 성능을 저하시키게 하기  때문에 주기적인 조각화 체크 Rebuild 작업이 요구 됩니다.

조각화를 확인하는 방법과 조각화 인덱스를 Rebuild하는 방법에 대해 알아보겠습니다.

인덱스 리빌드 작업 역시 DB 사용률이 낮은 시간에 진행할 것은 권장 드립니다.

 

 

[환경]

 

OS: Windows Server 2012

Product: SQL Server 2012 Ent

Database: Adventureworks2012

 

 

[ACTION]

1. 조각화 체크

1-1. SSMS에서 제공하는 보고서를 통한 확인

해당 데이터베이스 우클릭 - 보고서 - 표준 보고서- 인덱스 물리적 통계를 클릭합니다.

 

아래와 같이 평균 조각화, 조각 등을 확인할 있습니다.

 

 

1-2. 개체 탐색기를 통한 확인

해당 데이터베이스 - 테이블 - 테이블 - 인덱스 클릭 - 속성을 클릭합니다.

 

 

조각화 페이지를 선택하면, 조각화와 관련된 내용을 확인 있습니다.

 


 1-3. 동적 관리 함수를 통한 확인

아래의 쿼리문을 실행 합니다.

---------------------------------------------------------------------------

SELECT TOP 10

DB_NAME() AS 'DatabaseName', OBJECT_NAME(s.[object_id]) AS 'TableName',

i.name AS 'IndexName', ROUND(avg_fragmentation_in_percent,2) AS 'Fragmentation %'

FROM sys.dm_db_index_physical_stats(db_id(),NULL, NULL, NULL, NULL) AS s

INNER JOIN sys.indexes AS i

ON s.object_id=i.object_id AND s.index_id = i.index_id

WHERE s.database_id = DB_ID()

AND i.name IS NOT NULL

AND OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0

ORDER BY [Fragmentation %] DESC

GO

---------------------------------------------------------------------------

 

 

아래와 같이 조각화가 많이 진행 테이블이 순서대로 나옵니다.

 

 

2. 인덱스 다시 구성

2-1. SSMS 개체 탐색기를 통한 확인

조각화된 인덱스를 클릭하고, 다시 작성을 클릭합니다.

 

 

다시 작성할 인덱스를 선택하고, 확인을 클릭합니다.

 

 

2-2. 쿼리문을 통한 다시작성

아래의 쿼리문을 실행합니다.

---------------------------------------------------------------------------

USE AdventureWorks2012

GO

 

ALTER INDEX [PK_DatabaseLog_DatabaseLogID]

ON [dbo].[DatabaseLog]

REBUILD

GO

---------------------------------------------------------------------------

 

리빌드 옵션

FILEFACTOR: 인덱스 페이지를 지정한 비율만큼만 채우고, 나머지를 비워두는 옵션입니다. 페이지 분할이 업무 중에 일어 나지 않도록, 미리 빈공간을 할당해 놓는 방법으로 사용됩니다.

SORT_IN_TEMPDB: 인덱스 다시 작성 데이터 정렬 작업을 Tempdb 사용하도록 지정합니다.

STATISTICS_NORECOMPUTE: 인덱스와 연관된 통계를 자동으로 계산하지 않게 하는 옵션입니다.

 

[참고]

 

http://msdn.microsoft.com/en-us/library/ms189858.aspx#Fragmentation

 

 

 

 

 

신고
Posted by TM ~ing