사용하지 않는 인덱스 삭제-예기치 않은 위험 평가


16

우리는 7 월에 서버가 마지막으로 재부팅 된 이후 누적 된 DMV 통계에 따르면 수백 개의 사용되지 않은 인덱스가있는 매우 큰 데이터베이스를 보유하고 있습니다. 우리 DBA 중 하나가 다음과 같은 경고문을 작성했지만 나에게는 이해가되지 않습니다.

  1. 쿼리 최적화 프로그램에서이 인덱스가 있어야하므로 인덱스를 삭제하기 전에 고유성 제약 조건을 적용하지 않는지 확인해야합니다.
  2. 인덱스가 생성 될 때마다 해당 인덱스와 관련된 통계도 SQL Server에서 생성됩니다. 쿼리가 인덱스를 사용하지 않지만 통계를 사용하고있을 수 있습니다. 따라서 인덱스를 삭제 한 후 특정 쿼리 성능이 실제로 나빠지는 상황이 발생할 수 있습니다. SQL Server는 통계의 사용 통계를 유지하지 않습니다. 데이터베이스에서 "통계 자동 작성"기능을 사용하도록 설정했지만 쿼리 최적화 프로그램에서 누락 된 통계를 작성하기 전에 내부적으로 어떤 매개 변수를 충족해야하는지 모르겠습니다.

# 1과 관련하여 SQL Server는 삽입 / 업데이트가 수행되기 전에 고유성을 결정하기 위해 실제로 인덱스를 탐색하는 것으로 보이므로 인덱스가 사용되지 않는 것으로 표시되지 않습니다.

# 2와 관련하여 이것이 실제로 가능합니까?

그건 그렇고, 색인이 사용되지 않는다고 말하면 검색이없고 스캔이 없다는 것을 의미합니다.


3
연말 보고서를 실행하더라도 색인이 사용되지 않는다고 확신 할 경우 색인을 비활성화하는 것이 좋습니다.
Kin Shah

답변:


17

DBA의 우려는 모두 유효합니다.

# 1과 관련하여 SQL Server는 삽입 / 업데이트가 수행되기 전에 고유성을 결정하기 위해 실제로 인덱스를 탐색하는 것으로 보이므로 인덱스가 사용되지 않는 것으로 표시되지 않습니다.

고유성 보장은 올바른 결과를 얻기 위해 사용할 수있는 논리적 변환 또는 물리적 연산을 결정하는 데 옵티마이 저가 사용할 수 있습니다. 최적화 프로그램이 집계를 변환하거나 일대 다 병합 조인을 선택하는 등의 고유성 보장에 의존한다는 사실은 최종 실행 계획에서 인덱스에 물리적으로 액세스하지 않는 한 인덱스 사용 통계에 반영되지 않습니다. . 따라서 고유 인덱스 또는 제약 조건을 제거하거나 비활성화하는 데 매우주의해야합니다.

# 2와 관련하여 이것이 실제로 가능합니까?

예, 옵티마이 저는 해당 인덱스를 사용하는 액세스 권한이있는 최종 실행 계획없이 인덱스와 관련된 통계를 사용할 수 있습니다. '흥미로운'통계로드, 카디널리티 추정 계산 및 완료된 실행 계획 작성 프로세스는 상당히 독립적 인 활동입니다.

인덱스를 삭제하면 연관된 인덱스 통계도 제거되므로 다음에 명령문을 다시 컴파일 할 때 계획 품질에 영향을 줄 수 있습니다. 인덱스 통계 는 인덱스가 물리적으로 최종 계획에 존재하지 않는 경우에도 최종 계획이 의존하는 카디널리티 추정 계산에 사용될 수있다.

DBA는 자신의 것을 알고 있습니다.

이 중 어느 것도 사용하지 않은 것으로 보이는 인덱스를 절대로 제거 해서는 안된다는 의미는 아닙니다 . DBA의 우려 사항이 유효한 것이므로 적절한 테스트 및 복구 계획을 통해 변경 사항을 적절히 계획해야합니다. 내 경험상, # 1 지점은 # 2보다 문제가 될 가능성이 높지만 이것이 귀하의 상황에 해당되는지 여부를 알 방법은 없습니다.

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