View a markdown version of this page

Indeks yang digunakan rendah dan redundan - Amazon DocumentDB

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Indeks yang digunakan rendah dan redundan

Ikhtisar

Indeks meningkatkan kinerja kueri keseluruhan beban kerja, tetapi datang dengan biaya. Setiap indeks mengkonsumsi penyimpanan dan I/O sumber daya, dan operasi penulisan perlu memperbarui semua indeks pada koleksi. Jika database Anda berisi indeks yang tidak digunakan, kurang dimanfaatkan, atau berlebihan, itu menghasilkan overhead ke cluster, yang menyebabkan penurunan kinerja. Beberapa indeks yang tidak perlu menciptakan anti-pola yang menyebabkan masalah kinerja, peningkatan biaya penyimpanan, dan overhead operasional yang lebih tinggi.

Skenario pengindeksan sub optimal

  • Indeks yang Tidak Digunakan: Indeks dibuat untuk kueri satu kali, atau dalam iterasi produk sebelumnya yang tidak lagi diakses oleh pola kueri saat ini. Untuk mengidentifikasi indeks yang tidak digunakan pada koleksi, Anda dapat menggunakan IndexStats. Untuk informasi selengkapnya, lihat Bagaimana cara menganalisis penggunaan indeks dan mengidentifikasi indeks yang tidak digunakan?.

  • Indeks Redundan: Beberapa indeks yang mencakup pola kunci yang tumpang tindih atau pola kueri yang identik. Contoh: Indeks kunci tunggal pada atribut A menjadi berlebihan ketika indeks komposit mencakup atribut A dan B, karena indeks komposit dapat menangani kueri pada atribut A saja.

  • Over-Indexing: Membuat indeks “berjaga-jaga” tanpa menganalisis pola kueri aktual atau persyaratan kinerja.

  • Indeks Kardinalitas Rendah: Indeks pada bidang dengan beberapa nilai berbeda (misalnya, bidang boolean, bendera status) yang memberikan manfaat pengoptimalan kueri minimal.

Dampak pada Kinerja Cluster

  • Penyimpanan dan IO: Setiap indeks mengkonsumsi ruang penyimpanan dan sumber daya IO, berkontribusi terhadap biaya keseluruhan. Jika indeks tidak digunakan atau berlebihan, itu mewakili biaya yang tidak perlu pada cluster Anda.

  • Kinerja Tulis Terdegradasi: Operasi penyisipan, perbarui, dan hapus harus mempertahankan indeks, membuat overhead yang menghabiskan sumber daya. Indeks yang tidak digunakan atau berlebihan menambahkan overhead yang tidak perlu untuk operasi ini.

  • Memori dan Tekanan CPU: Indeks bersaing untuk memori kumpulan buffer dan dapat mengusir data yang sering diakses jika set kerja tidak sesuai dengan memori instance yang mengakibatkan suboptimal. BufferCacheHitRatio Sistem ini juga mengkonsumsi sumber daya CPU yang mempertahankan struktur indeks.

Alat yang tersedia untuk mengidentifikasi peluang pengoptimalan indeks

  • Alat Tinjauan Indeks:

  • Alat Deteksi Kardinalitas Indeks

Mengumpulkan toolkit:

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

1. Alat Tinjauan Indeks

Alat peninjauan indeks menganalisis semua koleksi dan indeks untuk menyediakan daftar indeks, pola penggunaannya, dan mengidentifikasi indeks redundan di klaster Amazon DocumentDB Anda. Jalankan alat ini pada semua instance cluster untuk analisis komprehensif. Untuk informasi selengkapnya, lihat Alat Tinjauan Indeks.

Pemakaian:

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

Berkas Keluaran

  • {server-alias}-collections.csv: Collection-level statistik

  • {server-alias}-indexes.csv: Metrik penggunaan indeks terperinci

  • {server-alias}-{timestamp}-index-review.json: Data mentah untuk analisis lebih lanjut

catatan

Jalankan untuk setiap instance di cluster dengan alias independen untuk menghasilkan statistik dari setiap instance, lalu jalankan alat untuk memberi Anda analisis kumulatif

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

2. Alat Deteksi Kardinalitas Indeks

Alat ini mengidentifikasi indeks dengan kardinalitas rendah yang tidak efisien untuk kinerja kueri.

Penggunaan

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

Parameter

  • --threshold: Persentase ambang kardinalitas (default: 1%)

  • --sample-count: Jumlah dokumen untuk sampel (default: 100.000)

  • --max-collections: Koleksi maksimum untuk dipindai per database (default: 100)

Untuk informasi selengkapnya, lihat https://aws.amazon.com/blogs/database/detect-and-fix-low-cardinality-indexes-in-amazon-documentdb/

Strategi Remediasi

1. Penghapusan Indeks yang tidak terpakai dan berlebihan

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

Indeks tidak boleh dijatuhkan tanpa berdiskusi dengan semua pihak yang berkepentingan dan menguji kinerja.

2. Optimalisasi Indeks Kardinalitas Rendah

  • Gunakan indeks sebagian dengan filter

  • Ubah indeks kardinalitas rendah tunggal menjadi indeks majemuk