Autor del tema
#1
pg_stat_statements ile Sorgu Analizi
Giriş ve neden önemli
PostgreSQL üzerinde çalışan sorgu setinin performansını anlamak çoğu zaman uygulama düzeyi metriklerden bağımsız olarak gereklidir. pg_stat_statements, her bir sorgunun toplam çalışma süresi, çağrılma sayısı, en uzun ve ortalama süreleri gibi metrikleri toplar. Bu veriler, hangi sorguların CPU, I/O veya blokdaki kilitlenmelere yol açtığını hızlıca gösterir. Modülün kurulumu basittir: shared_preload_libraries’e pg_stat_statements’i eklemek ve veritabanını yeniden başlatmak yeterlidir. Ardından bir reset ile yeni ölçüm periyotları başlatılabilir. ve
Temel metrikler ve anlamları
-.calls: belirtilen sorgunun tekrar çağrılma sayısı; yüksek değerde, darboğaz potansiyeli olan sorguyu gösterir.
-total_time ve min/max_time: toplam süre ve her çağrı için zaman aralıkları; ağ gecikmesi veya I/O beklemeleriyle ilişkili kalıpları ortaya çıkarır.
-mean_time, stddev_time: ortalama ve sapma; tutarlılık analizi için faydalıdır.
-rows: her çağrıda işlenen satır sayısı; veri dönüşünün maliyetini gösterir.
-shared_blks_hit / shared_blks_read / shared_blks_dirtied / local_blks_hit ve benzeri I/O istatistikleri: tamponlama davranışını anlamaya yardım eder.
Analiz yaklaşımı: dar boğazları nasıl tespit ederim
1) Sık çağrılan sorgulara odaklan: calls yüksek, total_time yüksek olan sorgular önceliklendirilir. Örneğin büyük bir veya birkaç benzer sorgunun toplam süresi, tüm sorgu toplamının büyük kısmını oluşturabilir.
2) Sorgu kalıplarını temizlemek: query metinleri, parametrelerle birlikte kullanılır; benzer yapılar için kalıp eşleşmesi (regex veya normalize edilmemiş form) yararlı olabilir.
3) I/O odaklı analiz: shared_blks_read ve local_blks_read artışı, disk I/O darboğazına işaret eder. Bu durumda indeks optimizasyonu veya tablo bölümlendirme düşünülür.
4) Plan değişim etkisi: Ortalama süreler ani değişiklikler gösteriyorsa, plan değişiklikleri veya istatistik hedeflerinin kayması olasıdır. pg_stat_statements ile zaman damgası tutmak ve sürüm/dil değişikliklerini karşılaştırmak gerekir.
5) Parçalanmış çalıştırma ve cache etkisi: high cache_hit ratio ile düşük total_time arasında ince farklar olabilir; bu durumda çalışma planlaması ve bağlantı havuzu etkileri incelenmelidir.
Pratik örnekler ve aksiyonlar
Kapanış
pg_stat_statements, PostgreSQL’te performans odaklı sorgu analizi için güvenilir bir araç sağlar. Doğru metrikleri seçip, dar boğazları karşılaştırmalı olarak izlemek, uzun vadeli iyileştirmeler için somut bir yol haritası sunar. Belirli bir sorgu grubunun metriklerini paylaşmak istersen, hangi versiyon ve çalışma yükü altında olduğunu da ekleyerek birlikte analiz edebiliriz.
Bu konu, PostgreSQL’in pg_stat_statements modülünün temel kullanımları ve performans odaklı analiz yaklaşımı üzerinde duruyor. Sunucu tarafı performansını artırmak için hangi metrikleri takip etmek gerektiğini, hangi tür sorguların sık çalıştığını ve darboğazların nasıl tespit edileceğini adım adım anlatıyorum. Bu sayede günlük operasyonlarda hangi sorguların iyileştirmeye aday olduğunu objektif olarak görmek mümkün olur.
Giriş ve neden önemli
PostgreSQL üzerinde çalışan sorgu setinin performansını anlamak çoğu zaman uygulama düzeyi metriklerden bağımsız olarak gereklidir. pg_stat_statements, her bir sorgunun toplam çalışma süresi, çağrılma sayısı, en uzun ve ortalama süreleri gibi metrikleri toplar. Bu veriler, hangi sorguların CPU, I/O veya blokdaki kilitlenmelere yol açtığını hızlıca gösterir. Modülün kurulumu basittir: shared_preload_libraries’e pg_stat_statements’i eklemek ve veritabanını yeniden başlatmak yeterlidir. Ardından bir reset ile yeni ölçüm periyotları başlatılabilir.
CÓDIGO
1ALTER SYSTEM SET shared_preload_libraries = 'pg_stat_statements';CÓDIGO
1SELECT pg_stat_statements_reset();Temel metrikler ve anlamları
- queryid ve query: genelleştirilmiş sorgu kalıplarını gösterir; parametre farklarını birleştirmek için kullanışlıdır.
-.calls: belirtilen sorgunun tekrar çağrılma sayısı; yüksek değerde, darboğaz potansiyeli olan sorguyu gösterir.
-total_time ve min/max_time: toplam süre ve her çağrı için zaman aralıkları; ağ gecikmesi veya I/O beklemeleriyle ilişkili kalıpları ortaya çıkarır.
-mean_time, stddev_time: ortalama ve sapma; tutarlılık analizi için faydalıdır.
-rows: her çağrıda işlenen satır sayısı; veri dönüşünün maliyetini gösterir.
-shared_blks_hit / shared_blks_read / shared_blks_dirtied / local_blks_hit ve benzeri I/O istatistikleri: tamponlama davranışını anlamaya yardım eder.
Analiz yaklaşımı: dar boğazları nasıl tespit ederim
1) Sık çağrılan sorgulara odaklan: calls yüksek, total_time yüksek olan sorgular önceliklendirilir. Örneğin büyük bir veya birkaç benzer sorgunun toplam süresi, tüm sorgu toplamının büyük kısmını oluşturabilir.
2) Sorgu kalıplarını temizlemek: query metinleri, parametrelerle birlikte kullanılır; benzer yapılar için kalıp eşleşmesi (regex veya normalize edilmemiş form) yararlı olabilir.
3) I/O odaklı analiz: shared_blks_read ve local_blks_read artışı, disk I/O darboğazına işaret eder. Bu durumda indeks optimizasyonu veya tablo bölümlendirme düşünülür.
4) Plan değişim etkisi: Ortalama süreler ani değişiklikler gösteriyorsa, plan değişiklikleri veya istatistik hedeflerinin kayması olasıdır. pg_stat_statements ile zaman damgası tutmak ve sürüm/dil değişikliklerini karşılaştırmak gerekir.
5) Parçalanmış çalıştırma ve cache etkisi: high cache_hit ratio ile düşük total_time arasında ince farklar olabilir; bu durumda çalışma planlaması ve bağlantı havuzu etkileri incelenmelidir.
Pratik örnekler ve aksiyonlar
- Sık görülen yoğun sorgular için indeks ve istatistik ayarlarını gözden geçirme: özellikle sequence/joins içeren basit SELECT sorguları; indexin kullanımı artırılabilir.
- Sorgu reformülasyonu: uzun ve karmaşık sorgular, alt sorguların veya CTE’lerin yeniden yazılmasıyla daha iyi yürütme planları elde edilebilir.
- Konfigürasyon ayarları: çalıştırma sürelerini etkileyen work_mem, shared_buffers gibi parametrelerin ince ayarı, belirli sorgu kümelerine odaklanabilir.
Kapanış
pg_stat_statements, PostgreSQL’te performans odaklı sorgu analizi için güvenilir bir araç sağlar. Doğru metrikleri seçip, dar boğazları karşılaştırmalı olarak izlemek, uzun vadeli iyileştirmeler için somut bir yol haritası sunar. Belirli bir sorgu grubunun metriklerini paylaşmak istersen, hangi versiyon ve çalışma yükü altında olduğunu da ekleyerek birlikte analiz edebiliriz.
