View a markdown version of this page

낮은 사용 및 중복 인덱스 - Amazon DocumentDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

낮은 사용 및 중복 인덱스

개요

인덱스는 워크로드의 전체 쿼리 성능을 개선하지만 비용이 발생합니다. 각 인덱스는 스토리지 및 I/O 리소스를 사용하며, 쓰기 작업은 컬렉션의 모든 인덱스를 업데이트해야 합니다. 데이터베이스에 사용되지 않거나 사용률이 낮거나 중복된 인덱스가 포함되어 있는 경우 클러스터에 오버헤드가 발생하여 성능이 저하됩니다. 여러 개의 불필요한 인덱스는 성능 문제, 스토리지 비용 증가 및 운영 오버헤드 증가를 유발하는 안티 패턴을 생성합니다.

하위 최적 인덱싱 시나리오

  • 미사용 인덱스: 일회성 쿼리 또는 현재 쿼리 패턴에서 더 이상 액세스하지 않는 이전 제품 반복에 대해 생성된 인덱스입니다. 컬렉션에서 미사용 인덱스를 식별하기 위해 indexStats를 사용할 수 있습니다. 자세한 내용은 인덱스 사용량을 분석하고 사용하지 않는 인덱스를 식별하려면 어떻게 해야 하나요? 단원을 참조하십시오.

  • 중복 인덱스: 중복 키 패턴 또는 동일한 쿼리 패턴을 포함하는 여러 인덱스입니다. 예: 복합 인덱스가 속성 A에서만 쿼리를 처리할 수 있기 때문에 복합 인덱스가 속성 A와 B를 모두 포함하는 경우 속성 A의 단일 키 인덱스가 중복됩니다.

  • 오버인덱싱: 실제 쿼리 패턴 또는 성능 요구 사항을 분석하지 않고 “경우에 따라” 인덱스를 생성합니다.

  • 낮은 카디널리티 인덱스: 쿼리 최적화 이점을 최소화하는 고유한 값(예: 부울 필드, 상태 플래그)이 거의 없는 필드의 인덱스입니다.

클러스터 성능에 미치는 영향

  • 스토리지 및 IO: 각 인덱스는 스토리지 공간과 IO 리소스를 사용하므로 전체 비용이 발생합니다. 인덱스가 사용되지 않거나 중복되는 경우 클러스터의 불필요한 비용을 나타냅니다.

  • 성능 저하: 삽입, 업데이트 및 삭제 작업은 인덱스를 유지하여 리소스를 소비하는 오버헤드를 발생시켜야 합니다. 사용하지 않거나 중복된 인덱스는 이러한 작업에 불필요한 오버헤드를 추가합니다.

  • 메모리 및 CPU 압력: 인덱스는 버퍼 풀 메모리에 대해 경쟁하며 작업 세트가 인스턴스 메모리에 맞지 않아 최적이 아닌 BufferCacheHitRatio가 발생하는 경우 자주 액세스하는 데이터를 제거할 수 있습니다. 또한 시스템은 인덱스 구조를 유지 관리하는 CPU 리소스를 사용합니다.

인덱스 최적화 기회를 식별하는 데 사용할 수 있는 도구

  • 인덱스 검토 도구:

  • 인덱스 카디널리티 감지 도구

도구 키트 수집:

git clone https://github.com/awslabs/amazon-documentdb-tools.git

1: 인덱스 검토 도구

인덱스 검토 도구는 모든 컬렉션과 인덱스를 분석하여 인덱스 목록과 사용 패턴을 제공하고 Amazon DocumentDB 클러스터에서 중복 인덱스를 식별합니다. 포괄적인 분석을 위해 모든 클러스터 인스턴스에서이 도구를 실행합니다. 자세한 내용은 인덱스 검토 도구를 참조하세요.

사용량:

cd performance/index-review/ python3 index-review.py --server-alias <server-alias> --uri <mongodb-uri>

출력 파일

  • {server-alias}-collections.csv: 컬렉션 수준 통계

  • {server-alias}-indexes.csv: 세부 인덱스 사용량 지표

  • {server-alias}-{timestamp}-index-review.json: 추가 분석을 위한 원시 데이터

참고

독립 별칭을 사용하여 클러스터의 각 인스턴스에 대해를 실행하여 각 인스턴스에서 통계를 생성한 다음 도구를 실행하여 누적 분석을 수행합니다.

예: python3 index-review.py --files "{server-alias}-{timestamp}-index-review.json, {server-alias}-{timestamp}-index-review.json" --server-alias full-review

2. 지표 카디널리티 감지 도구

이 도구는 쿼리 성능에 비효율적인 카디널리티가 낮은 인덱스를 식별합니다.

사용량

cd performance/index-cardinality-detection/ python3 detect-cardinality.py --uri <mongodb-uri>

파라미터

  • --threshold: 카디널리티 임계값 백분율(기본값: 1%)

  • --sample-count: 샘플링할 문서 수(기본값: 100,000)

  • --max-collections: 데이터베이스당 스캔할 최대 컬렉션 수(기본값: 100)

자세한 내용은 https://aws.amazon.com/blogs/database/detect-and-fix-low-cardinality-indexes-in-amazon-documentdb/ 참조하십시오.

문제 해결 전략

1: 미사용 및 중복 인덱스 제거

// Example: Drop unused index db.collection.dropIndex("unused_index_name")
참고

모든 이해관계자와 상의하고 성능을 테스트하지 않고 인덱스를 삭제해서는 안 됩니다.

2. 낮은 카디널리티 인덱스 최적화

  • 필터와 함께 부분 인덱스 사용

  • 단일 낮은 카디널리티 인덱스를 복합 인덱스로 변환