본문 바로가기

DBMS/SQL Server

[SQL Server] 가장 조각이 많이 난 인덱스 TOP 10

 

지속적인 데이터 변경 작업이나 데이터 입력에 따른 반복되는 페이지 분할과 같은 문제로 인해

인덱스에 조각화가 발생하고, 이는 당연히 인덱스를 통한 조회 성능이 저하되는 결과를 가져온다.

이런 경우 인덱스를 다시 구성(조각모음)하거나 다시 작성해서 조각화를 제거할 수 있다.

 

sys.dm_db_index_physical_stats 동적 관리 함수를 조회해서 조각화가 심한 인덱스를 확인할 수 있다.

 

 -- 가장 조각이 많이 인덱스 TOP 10

 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 -- HEAP 무시

 AND OBJECTPROPERTY(S.OBJECT_ID, 'IsMsShipped') = 0 –- 시스템 개체 무시

 ORDER BY [Fragmentation %] DESC

 

 

참고 : 이장래와 함께하는 SQL Server 2012 운영과 개발