사용하지 않은 인덱스 모범 사례


11

이 쿼리를 기반으로 적은 양의 총 읽기 (1 또는 2와 같이 0 또는 0에 매우 가깝 음)와 높거나 중간 정도의 사용자 업데이트 (이 쿼리로 삽입 또는 삭제를 찾을 수 없음)가 표시되는 경우 행 수가 많으면 이론적 으로 인덱스를 제거 해야합니다 .

SELECT DISTINCT
    OBJECT_NAME(s.[object_id]) AS ObjectName
       , p.rows TableRows
       , i.name AS [INDEX NAME]
       , (user_seeks + user_scans + user_lookups) AS TotalReads
       , user_updates UserUpdates
FROM sys.dm_db_index_usage_stats s
    INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] 
        AND i.index_id = s.index_id 
    INNER JOIN sys.partitions p ON p.object_id = i.object_id
WHERE OBJECTPROPERTY(s.[object_id],'IsUserTable') = 1
       AND s.database_id = DB_ID()
       AND i.name IS NOT NULL
ORDER BY (user_seeks + user_scans + user_lookups) ASC

이 가정의 정확성을 여기에서 교차 확인하고 싶습니다. 예를 들어, 1 년 이상 존재했지만 읽지 못했지만 고도로 업데이트 된 인덱스는 나쁜 생각 인 것 같습니다. 이 가정이 유효하지 않은 시나리오가 있습니까?

답변:


15

이 DMV는 마지막 SQL Server 재시작 이후의 통계 만 유지합니다. 뷰가 완전히 지워지고 모든 것이 처음부터 시작됩니다.

더 중요한 것은 특정 인덱스에 대한이보기의 행은 인덱스가 재구성 될 때 제거되지만 재구성 될 때는 제거되지 않는다는 것입니다. 정기적 인 인덱스 유지 관리를 수행하는 경우 유지 관리 로그를보고 삭제하려는 인덱스가 최근에 다시 작성되었는지 확인하는 것이 좋습니다.

따라서 마지막 다시 시작이 지난 주 패치 화요일 업데이트 또는 어제의 서비스 팩에 대한 마지막 다시 시작 이후의 낮은 읽기를 기반으로 의사 결정을하는 것이 현명하지 않을 수 있습니다. 또는 마지막 재 구축 이후 인덱스 유지 관리를 수행 할 때. 한 달에 한 번, 분기에 한 번 또는 일년에 한 번만 실행되는 보고서가있을 수 있으며 중요하고 성급한 사람이 실행합니다.

또한 미래에 발생할 수있는 일에 대한 색인이있을 수 있습니다. 세금 시즌을 준비하는 일련의 보고서가 있다고 가정하겠습니다.

그래서 내 조언은 다음과 같습니다.

DMV를 사용하여 제거 후보 색인 을 식별 하십시오 . 그러나 기포로 결정하지 마십시오. 색인 현재 사용되지 않는 것처럼 보이더라도 삭제하기 전에 색인 존재 하는 이유를 판별하기 위해 적절한 작업을 수행해야합니다. .


@AaronBertrand 그렇다면 마지막 재시작 시간과 함께 기록을 추적하는 것이 이것에 더할만한 것입니까? 답변 주셔서 감사합니다.
DoubleVu

1
@DoubleVu 예. 사용 통계 DMV의 출력을 변경할 수있는 항목의 영향을받지 않는 교육 된 결정을 내릴 수 있도록 인덱스 사용 내역의 스냅 샷을 유지하는 것이 좋습니다.
Aaron Bertrand

2

그렇기 때문에 뷰에는 마지막 재부팅 이후의 통계 만 있습니다. 유지 관리 기간이 시작되기 전 아침에 매달 게시 한 것과 같은 쿼리를 실행하는 작업을 설정하여 서버를 다시 부팅하기 전에 매월 정보를 캡처 할 수있었습니다. 이를 통해 더 나아가서 시간이 지남에 따른 트렌드를 살펴볼 수있었습니다. 또한 누락 된 인덱스를 찾은 두 번째 쿼리가있었습니다.

고려해야 할 또 다른 사항은 다른 인덱스가 테이블에있는 것입니다. 대부분 다른 인덱스의 복제본이기 때문에 사용되지 않을 수 있습니다. 예. SQL Server를 사용하면 서로 다른 두 개의 동일한 인덱스를 만들 수 있으므로 완전히 중복 될 수 있습니다.

해당 인덱스가 제거 된 경우 해당 인덱스를 사용한 쿼리에 대한 쿼리 계획의 결과를 확인할 수도 있습니다. 사용할 다른 인덱스가 있거나 전체 테이블 스캔으로 대체되어야 할 수도 있습니다.

인덱스는 과학만큼이나 예술적인 결과를 낳습니다. 실행되는 것에 대한 모든 것을 알기가 어렵고 어쨌든 자주 변경되기 때문입니다.

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