Bagaimana cara menentukan biaya / manfaat dari penambahan indeks?

10

Menurut Craig Ringer :

Meskipun biasanya merupakan ide yang baik untuk membuat indeks pada (atau termasuk) kolom kunci asing di sisi referensi Anda, itu tidak diperlukan. Setiap indeks yang Anda tambahkan memperlambat operasi DML sedikit, sehingga Anda membayar biaya kinerja pada setiap INSERT, UPDATEatau DELETE. Jika indeks jarang digunakan, mungkin tidak layak dimiliki.

Bagaimana Anda menentukan apakah manfaat dari penambahan indeks melebihi biayanya?

Apakah Anda melakukan tes unit profil sebelum / setelah menambahkan indeks dan memeriksa untuk kenaikan kinerja keseluruhan? Atau ada cara yang lebih baik?

Gili
sumber
pg_stat_user_indexesmembantu memandu Anda dengan ini, menunjukkan informasi tentang penggunaan indeks. Untuk memperkirakan biaya perawatan Anda dapat melihat aktivitas menulis tabel Anda pg_stat_user_tablestetapi karena HOT, tidak semua pembaruan harus menyentuh indeks sehingga Anda mungkin melebih-lebihkan sedikit.
Craig Ringer
@CraigRinger, itu sangat membantu. Terima kasih!
Gili
Saya mengandalkan pgBadger hampir secara eksklusif. Dan nyali saya.
Colin 't Hart

Jawaban:

4

Penggunaan indeks tergantung pada struktur data Anda dan selektivitas data Anda. Jika Anda membuat pertanyaan yang tidak Anda gunakan, itu mahal. Jika Anda menggunakannya secara efektif, mereka adalah alat yang hebat. Ada perencana kueri dan analitik perencana kueri ( EXPLAIN) hanya perencanaan atau perencanaan dan pelaksanaan perintah ( EXPLAIN ANALYZE).

Dan ada buku online yang bagus: gunakan indeks luke tentang rekomendasi penggunaan indeks

Mladen Uzelac
sumber
4
Aturan praktisnya bagus, tetapi terlalu umum dalam kasus ini. Saya mencari alat / pengukuran konkret yang akan menyarankan penambahan / penghapusan indeks berdasarkan perilaku runtime aktual aplikasi saya.
Gili
Mungkin ini adalah alat yang Anda cari: enterprisedb.com/products-services-training/products/…
Mladen Uzelac
1

Pilih aturan praktis dan ikuti mereka. Misalnya, saya selalu membuat indeks di sisi referensi kunci asing.

Pastikan Anda menguji kinerja produk Anda terhadap kriteria kinerja berdasarkan kebutuhan pengguna. Misalnya, sistem perlu menangani beban masuk 100 permintaan POST tipe X per menit.

Jika Anda tidak dapat memenuhi persyaratan kinerja Anda maka perbaiki model Anda, mungkin melanggar aturan praktis Anda dalam proses itu.

Kecepatan
sumber