지속적인 데이터 변경 작업이나 데이터 입력에 따른 반복되는 페이지 분할과 같은 문제로 인해
인덱스에 조각화가 발생하고, 이는 당연히 인덱스를 통한 조회 성능이 저하되는 결과를 가져온다.
이런 경우 인덱스를 다시 구성(조각모음)하거나 다시 작성해서 조각화를 제거할 수 있다.
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 운영과 개발
'DBMS > SQL Server' 카테고리의 다른 글
[SQL Server] ROLLUP 연산자가 지원되지 않는 버전에서 총합계 구하기 (0) | 2013.05.03 |
---|---|
[SQL Server] 모든 동적 뷰와 함수를 확인하기 위한 쿼리 (0) | 2013.05.02 |
[SQL Server] 별칭(Alias)을 지정하는 여러가지 방법 (0) | 2013.04.26 |
[SQL Server] SELECT INTO 구문 사용시 복사되지 않는 것 (0) | 2013.04.23 |
[SQL Server] 한 테이블에 생성할 수 있는 인덱스의 최대 개수 (0) | 2013.04.15 |