Index Ekledim, Write Yavaşladı
SELECT düştü, INSERT kuyruğa girdi

İlk yazıda listeye bileşik index koydum. Okuma düzeldi. Öğleden sonra taslak kaydetme p95'i şişti. Aynı tablo, aynı disk, yeni yük: her INSERT dört index'i de güncelliyordu. Üçünü ben eklemiştim, birini 'belki filtre gerekir' diye.
Yazma, heap + her index
Heap'e satır girer. Her secondary index'e de girer. WAL her ikisini de yazar. UPDATE published_at değiştirince hem heap hem (status, published_at) index'i hem de 'belki' diye açtığım (author_id, created_at) index'i işlenir. Okumadığım index, yazdığım index'tir.
SELECT indexrelid::regclass AS index_name,
idx_scan,
idx_tup_read,
pg_size_pretty(pg_relation_size(indexrelid)) AS size
FROM pg_stat_user_indexes
WHERE relid = 'posts'::regclass
ORDER BY idx_scan, pg_relation_size(indexrelid) DESC;
posts_author_created_idx 14 günde 11 scan, 48 MB. Liste onu kullanmıyor. INSERT her taslakta 48 MB'lık ağacı da dengeliyor. Düşürünce yazma 80 ms'den 18 ms'ye geldi. Liste aynı kaldı; zaten o index'i kullanmıyordu.
Kapsayan index'i çoğaltmak
INCLUDE (title, excerpt) bir listeyi index-only yaptı. İkinci bir kapsayan index'i 'detay sayfası için' kopyalayınca yazma yine çıktı. INCLUDE ucuz değil; güncellenen her kolon o yaprağı da kirletir. title her kaydette değişiyorsa kapsayan index, dar index'ten pahalıdır.
Kuralım daraldı: scan sayısı ve yazma p95 aynı ticket'ta duruyor. Index'i 'okuma kazandı' diye kapatmıyorum. Kullanılmayanı düşürmek de serinin parçası. Eklediğim her btree, INSERT'in sessiz ortağı.
Yorumlar
Yorumlar (0)
Yorumlar üyelere açık. Üye ol · Giriş yap