페이지 수가 <1000 인 인덱스를 다시 작성하지 않는 이유는 무엇입니까?


17

인덱스 유지 관리에 Ola Hallengrens 스크립트를 사용합니다. 이를 수행하기 전에 다음 쿼리를 사용하여 가장 조각난 인덱스를 확인했습니다.

SELECT dbschemas.[name] as 'Schema',
dbtables.[name] as 'Table',
dbindexes.[name] as 'Index',
indexstats.avg_fragmentation_in_percent,
indexstats.page_count
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
ORDER BY indexstats.avg_fragmentation_in_percent desc

내 경우, avg_fragmentation 끝났다 70 % 에 대한 15 개 인덱스 이상 30 % 에 대한 28 개 인덱스.

그래서 Ola Hallengren의 솔루션을 사용하여 모든 색인을 다시 작성합니다. 쿼리를 다시 실행했을 때의 결과는 다음과 같습니다.

이상 분열 70 % 에 대한 12 개 인덱스, 이상 30 % 에 대한 15 개 인덱스.

나는 그 이유 page_count가 여전히 매우 조각화 된 각 인덱스에 대해 1000보다 낮았 기 때문이라고 생각했습니다 . 예를 들어, page_count 967 의 인덱스 중 하나의 조각화 비율은 98,98 %입니다 ! 나에게, 그 지수를 재건 할 가치가있는 것 같습니다! 나는 그 후에 조각화가 0 %였다 . 또한 page_count132 의 지수 는 95 % 에서 0 %로 증가했습니다.

그래서 내 질문은 인덱스를 다시 작성하지 않는 이유는 무엇입니까? 한 가지 이유는 재건에 시간과 자원이 필요하지만 색인이 작기 때문에 이것이 상대적으로 자원이 적다는 것을 의미하지 않습니까? 그래도 재건하는 것이 유리한가요?

이 사이트에는 여러 가지 관련 질문이 있지만 모두 색인이 조각 모음되지 않는 이유 또는 색인이 작고 조각 모음을하지 않은 경우 색인이 여전히 유용한 지에 대한 질문에 대답합니다. 문제는 어쨌든 어떻습니까?


작은 인덱스는 메모리에 캐시 될 수 있습니다. 어쨌든 IO가 발생하지 않는 인덱스는 조각 모음의 이점을 얻지 못합니다. 이 1000 페이지 카운트 규칙은 휴리스틱입니다.
usr

답변:


20

최소 페이지 수에 대한 지침은 다소 임의적 입니다. 조각화를 줄이면 가장 큰 이점은 다음과 같습니다.

  1. 그것은을 위해 미리 읽기 성능을 향상시킬 수있는 범위 스캔을; 과
  2. 페이지 밀도를 향상시킬 수 있습니다 (페이지 당 행 수).

이 두 가지 요소는 모두 작은 인덱스에 대해서는 덜 중요합니다.

작은 인덱스를 다시 작성하기위한 반대 주장은 본질적으로 다음과 같습니다.

"왜 귀찮게? 걱정할 더 중요한 것들이 없으십니까?".

즉, 재건 / 재구성은 무료가 아닙니다. 경우에 따라 추가 노력과 로그 생성을 피하는 것이 좋습니다 (예 : 로그가 여러 가지 이유로 WAN을 통해 배송 / 복사되는 경우 (예 : 미러링, 가용성 그룹, 복제 ...)). 또한 온라인을 재 구축하지 않는 한 (또는 경우에 따라) 재 구축은 잠금을 통해 다른 동시 프로세스에 영향을 줄 수 있습니다. 마지막으로 작은 인덱스의 경우 혼합 범위의 할당으로 인해 재 구축으로 인해 조각화가 줄어들지 않을 수도 있습니다 ( 추적 플래그 1118을 사용 하여 실행하지 않는 한 ).

이 작은 인덱스를 다시 작성하는 것이 여전히 행복하고 결과를 신경 쓰지 않으면 @PageCountLevelOla의 절차에 전달 된 매개 변수 의 값을 변경하십시오 .

자세한 내용 은 Paul Randal의 Index Fragmentation 프레젠테이션PASS TV 레코딩을 참조하십시오.

또한 SQL Server에서 인덱스 조각화가 중요하지 않은 이유 에 대해 Brent Ozar의 이야기를 볼 수도 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.