

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
<a name="anti-pattern-low-used-redundant-indexes"></a>

## Ikhtisar
<a name="low-indexes-overview"></a>

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?](user_diagnostics.md#user-diag-index-usage).
+ 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
<a name="low-indexes-impact"></a>
+ **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
<a name="low-indexes-tools"></a>
+ 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](https://github.com/awslabs/amazon-documentdb-tools/tree/master/performance/index-review).

**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/](https://aws.amazon.com/blogs/database/detect-and-fix-low-cardinality-indexes-in-amazon-documentdb/)

## Strategi Remediasi
<a name="low-indexes-remediation"></a>

**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