PostgreSQL Tablo İstatistikleri

Ezgi Karahan
3 min readNov 28, 2022

--

Merhaba , bu yazımda postgresql tablo istatistiklerine ait parametrelerden bahsedeceğim.

PostgreSQL’in cumulative istatistik sistemi , server activity hakkında bilgilerin toplanmasını ve raporlanmasını destekler.

İstatistikler yalnızca track_activities parametresi etkinleştirildiğinde toplanır.

Kullanıcı tabloları özelinde istatistikleri görmek için pg_stat_user_tables viewı kullanabilirsiniz.

pg_stat_user_tables activityler için tablo düzeyinde istatistikler sağlar.

Belirli veritabanı için her bir tabloya göre ayrılmış etkinlik istatistiklerine aşağıdaki komut ile erişebilirsiniz.

Sadece belirli bir tablo özelinde incelemek isterseniz relname koşulu ile tablo adını vermelisiniz.

Tablo adı ve karşılık gelen şema ve sahip bilgilerinin yanı sıra bu görünüm, tablo erişim modeli ve bakım etkinliği hakkında da bilgi sağlar.

İstatistik parametrelerinin bize hangi datayı sağladığını inceleyelim 🏃‍♀

seq_scan : Tabloda başlatılan seq scanlerin sayısı

seq_tup_read : Seq scanler tarafından getirilen canlı satır sayısı

idx_scan : Tabloda başlatılan index taramalarının sayısı

idx_tup_fetch : Index taramaları tarafından getirilen canlı satır sayısı

n_tup_ins : Insert edilen satır sayısı

n_tup_upd : Update edilen satır sayısı (hot update içerir)

n_tup_del : Delete edilen satır sayısı

n_tup_hot_upd : Hot update edilen satır sayısı

Hot update konusunuda daha önceki dökümanımda ele almıştım inceleyebilirsiniz .

n_live_tup : Canlı satır sayısı

n_dead_tup : Ölü satır sayısı

Dead Tuples

PostgreSQL’de DELETE yaptığınızda, satır (diğer adıyla Tuple) veri dosyasından hemen kaldırılmaz. Bunun yerine, yalnızca bir başlıkta xmax alanı ayarlanarak silinmiş olarak işaretlenir. PostgreSQL’de UPDATE’ler DELETE + INSERT olarak gerçekleşir.

Temizlenmezlerse, bu “ölü satırlar” (herhangi bir işlem için etkili bir şekilde görünmez) veri dosyalarında sonsuza kadar kalacak, disk alanını boşa harcayacak ve birçok DELETE ve UPDATE içeren tablolar için ölü satırlar disk alanının büyük çoğunluğunu kapsayacaktır. PostgreSQL’de buna “bloat” diyoruz.

Ve doğal olarak, veri sorgularının işlenmesi ne kadar fazla olursa (%99'u anında “ölü” olarak atılsa bile), sorgular o kadar yavaş olur.

n_mod_since_analyze : Tablonun en son analiz edilmesinden bu yana değiştirilen satır sayısı

n_ins_since_vacuum : Tablonun en son vacuumlanmasından bu yana eklenen satır sayısı

last_vacuum : Tablonun manuel olarak en son ne zaman vacuumlandığı (VACUUM FULL sayılmaz)

last_autovacuum : Tablonun autovacuum tarafından en son ne zaman süpürüldüğü

last_analyze : Tablonun manuel olarak analiz edildiği son zaman

last_autoanalyze : Tablonun autovacuum tarafından en son ne zaman analiz edildiği

vacuum_count : Tablonun manuel olarak vacuumlanma sayısı (VACUUM FULL sayılmaz)

autovacuum_count : Tablonun autovacuum tarafından vakumlanma sayısı

Vacuum ve Autovacuum konusunuda daha önceki dökümanımda ele almıştım inceleyebilirsiniz.

analyze_count : Tablonun manuel olarak analiz edilme sayısı

autoanalyze_count : Tablonun autovacuum tarafından analiz edilme sayısı

Sevgiler 💛

Referans

--

--