pgpro_stats uzantısı, bir sunucu tarafından işlenen tüm SQL ifadelerinin planlama ve yürütme istatistiklerini toplamak için olanaklar sağlar. Bu uzantı pg_stat_statements modülüne dayanır ve aşağıdaki ek işlevselliği uygular:

  • Sorgu metinlerinin yanı sıra ilgili sorgu planlarının da saklanması.
  • İstatistik toplama sıklığını değiştirme olasılığı, buna bağlı maliyetleri optimize etmek için.
  • Yürütülen sorgular için bekleme olayları istatistiklerinin hesaplanması.
  • Operatörlerin planlama ve yürütme sırasında kaynak kullanım istatistiklerinin sayılması.
  • Önbellek geçersiz kılma istatistiklerinin sayılması.
  • Arşivleyici için ek istatistiklerin hesaplanması.
  • Sistem çekirdeği tarafından toplanan veritabanları, tablolar ve indekslerin temizlenmesi istatistiklerini görüntüleme olanağı.
  • Uygulama oturumlarının izlenmesi.
  • Diğer uzantıları taklit eden görünümlerin oluşturulması.

<strong>Not:</strong> Sunucu durdurulduğunda, pgpro_stats uzantısı toplanan istatistikleri pgpro_stats_statements ve pgpro_stats_totals görünümlerindeki sütun sayısına ve sırasına bağlı olan bir formatta iki dosyaya diske yükler. Bu format yeni bir pgpro_stats sürümünde değişirse, daha önce kaydedilmiş istatistikler uzantı güncellemesinden sonraki ilk sunucu yeniden başlatmasında okunmayacak ve günlüğe bir hata yazılacaktır:

LOG:  pgpro_stats: could not load statements data file of obsolete format "pg_stat/pgpro_stats.stat"

veya

LOG:  pgpro_stats: could not load statements data file of obsolete format "pg_stat/pgpro_stats_totals.stat"

Dosyaların içeriği yok sayılacak ve ilgili istatistikler sıfırlanacaktır.

G.2.1. Sınırlamalar

pgpro_stats uzantısı, pg_stat_statements modülüne dayandığı için aynı sınırlamalara sahiptir:

  • İstatistikler, paylaşılan bellekte saklanır ve bu nedenle sunucu yeniden başlatıldığında sıfırlanır.
  • Uzantı, normalleştirilmiş sorgu metinlerini ve planlarını saklar, bu da bellek kullanımını artırabilir.
  • pgpro_stats.max parametresi tarafından belirlenen maksimum ifade sayısına ulaşıldığında, en az kullanılan ifadeler otomatik olarak kaldırılır.

G.2.2. Kurulum ve Hazırlık

pgpro_stats, Postgres Pro Enterprise ve Postgres Pro Standard ile birlikte gelir. Kurulum için, uzantıyı veritabanında oluşturmanız gerekir:

CREATE EXTENSION pgpro_stats;

Not: CREATE EXTENSION komutu hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.

Uzantı kurulduktan sonra, pgpro_stats_statements ve pgpro_stats_totals görünümleri kullanılabilir hale gelir.

G.2.2.1. Ön Gereksinimler

pgpro_stats kullanmak için, aşağıdaki PostgreSQL parametrelerinin etkinleştirilmesi önerilir:

G.2.3. Kullanım

pgpro_stats uzantısı kurulduktan sonra, pgpro_stats_statements ve pgpro_stats_totals görünümlerini sorgulayarak SQL ifadelerinin istatistiklerini görüntüleyebilirsiniz.

G.2.3.1. Temel Kullanım

En çok zaman harcayan sorguları bulmak için:

SELECT query, calls, total_exec_time, mean_exec_time
FROM pgpro_stats_statements
ORDER BY total_exec_time DESC
LIMIT 10;

En çok yürütülen sorguları bulmak için:

SELECT query, calls, total_exec_time, mean_exec_time
FROM pgpro_stats_statements
ORDER BY calls DESC
LIMIT 10;

En yavaş sorguları bulmak için:

SELECT query, calls, mean_exec_time, max_exec_time
FROM pgpro_stats_statements
WHERE calls > 0
ORDER BY mean_exec_time DESC
LIMIT 10;

G.2.3.2. Toplam İstatistikleri Görüntüleme

pgpro_stats_totals görünümü, veritabanları, roller, istemci düğümleri ve uygulamalar için toplam istatistikler sağlar:

-- Veritabanına göre toplam istatistikler
SELECT 
    d.datname AS database,
    t.queries_executed,
    t.total_plan_time + t.total_exec_time AS total_time,
    t.shared_blks_hit,
    t.shared_blks_read
FROM pgpro_stats_totals t
JOIN pg_database d ON t.dbid = d.oid
ORDER BY total_time DESC;

Not: pg_database sistem kataloğu hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.

Uygulamaya göre toplam istatistikler:

SELECT 
    application,
    SUM(queries_executed) AS total_queries,
    SUM(total_plan_time + total_exec_time) AS total_time
FROM pgpro_stats_totals
WHERE application IS NOT NULL
GROUP BY application
ORDER BY total_time DESC;

G.2.3.3. Sorgu Planlarını Görüntüleme

pgpro_stats_statements görünümü, her sorgu için plan bilgilerini içerir. Sorgu planlarını görüntülemek için:

SELECT queryid, query, plan
FROM pgpro_stats_statements
WHERE plan IS NOT NULL
ORDER BY total_exec_time DESC
LIMIT 5;

G.2.3.4. Bekleme Olaylarını Analiz Etme

Bekleme olayları istatistiklerini görüntülemek için:

SELECT 
    queryid,
    query,
    wait_events
FROM pgpro_stats_statements
WHERE wait_events IS NOT NULL
ORDER BY total_exec_time DESC
LIMIT 10;

G.2.3.5. İstatistikleri Sıfırlama

Tüm istatistikleri sıfırlamak için:

SELECT pgpro_stats_statements_reset();

Belirli bir veritabanı için istatistikleri sıfırlamak için:

SELECT pgpro_stats_statements_reset(
    dbid := (SELECT oid FROM pg_database WHERE datname = 'mydb')
);

Not: pg_database sistem kataloğu hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.

G.2.4. Görünümler

pgpro_stats uzantısı aşağıdaki görünümleri sağlar:

G.2.4.1. pgpro_stats_statements

pgpro_stats_statements görünümü, her normalleştirilmiş SQL ifadesi için planlama ve yürütme istatistiklerini içerir. Bu görünüm pg_stat_statements görünümüne benzer, ancak ek olarak sorgu planlarını, bekleme olayları istatistiklerini ve operatör kaynak kullanım bilgilerini içerir.

pgpro_stats_statements görünümü aşağıdaki sütunları içerir:

Sütun Tip Açıklama
userid oid İfadeyi yürüten kullanıcının OID'si
dbid oid İfadenin yürütüldüğü veritabanının OID'si
queryid bigint Normalleştirilmiş sorgu metninin hash kodu
planid bigint Sorgu planının hash kodu
query text Normalleştirilmiş sorgu metni
plan text Sorgu planı (EXPLAIN çıktısı)
plans bigint İfadenin planlandığı sayı
total_plan_time double precision İfadenin planlanmasında harcanan toplam süre (milisaniye)
min_plan_time double precision İfadenin planlanmasında harcanan minimum süre (milisaniye)
max_plan_time double precision İfadenin planlanmasında harcanan maksimum süre (milisaniye)
mean_plan_time double precision İfadenin planlanmasında harcanan ortalama süre (milisaniye)
stddev_plan_time double precision Planlama süresinin standart sapması (milisaniye)
calls bigint İfadenin yürütülme sayısı
total_exec_time double precision İfadenin yürütülmesinde harcanan toplam süre (milisaniye)
min_exec_time double precision İfadenin yürütülmesinde harcanan minimum süre (milisaniye)
max_exec_time double precision İfadenin yürütülmesinde harcanan maksimum süre (milisaniye)
mean_exec_time double precision İfadenin yürütülmesinde harcanan ortalama süre (milisaniye)
stddev_exec_time double precision Yürütme süresinin standart sapması (milisaniye)
rows bigint İfade tarafından alınan veya etkilenen toplam satır sayısı
shared_blks_hit bigint Paylaşılan blok önbellek isabet sayısı
shared_blks_read bigint Okunan paylaşılan blok sayısı
shared_blks_dirtied bigint Kirletilen paylaşılan blok sayısı
shared_blks_written bigint Yazılan paylaşılan blok sayısı
local_blks_hit bigint Yerel blok önbellek isabet sayısı
local_blks_read bigint Okunan yerel blok sayısı
local_blks_dirtied bigint Kirletilen yerel blok sayısı
local_blks_written bigint Yazılan yerel blok sayısı
temp_blks_read bigint Okunan geçici blok sayısı
temp_blks_written bigint Yazılan geçici blok sayısı
blk_read_time double precision Blok okuma için harcanan toplam süre (milisaniye)
blk_write_time double precision Blok yazma için harcanan toplam süre (milisaniye)
wal_records bigint Oluşturulan WAL kayıt sayısı
wal_fpi bigint Oluşturulan WAL tam sayfa görüntü sayısı
wal_bytes numeric Oluşturulan WAL bayt miktarı
wal_buffers_full bigint WAL tamponlarının dolu olduğu sayı
inval_msgs pgpro_stats_inval_msgs Önbellek geçersiz kılma mesaj istatistikleri
rusage pgpro_stats_rusage Kaynak kullanım istatistikleri (CPU, I/O)
wait_events pgpro_stats_wait_events Bekleme olayları istatistikleri

G.2.4.2. pgpro_stats_totals

pgpro_stats_totals görünümü, veritabanları, roller, istemci düğümleri ve uygulamalar için toplam istatistikler sağlar. Bu görünüm, yük dağılımını analiz etmek için kullanılır.

pgpro_stats_totals görünümü aşağıdaki sütunları içerir:

Sütun Tip Açıklama
dbid oid Veritabanı OID'si
userid oid Kullanıcı OID'si
client_node text İstemci düğüm adı
application text Uygulama adı
queries_executed bigint Yürütülen sorgu sayısı
total_plan_time double precision Toplam planlama süresi (milisaniye)
total_exec_time double precision Toplam yürütme süresi (milisaniye)
blk_read_time double precision Blok okuma süresi (milisaniye)
blk_write_time double precision Blok yazma süresi (milisaniye)
shared_blks_hit bigint Paylaşılan blok önbellek isabet sayısı
shared_blks_read bigint Okunan paylaşılan blok sayısı
shared_blks_dirtied bigint Kirletilen paylaşılan blok sayısı
shared_blks_written bigint Yazılan paylaşılan blok sayısı
wal_bytes numeric Oluşturulan WAL bayt miktarı
inval_msgs pgpro_stats_inval_msgs Önbellek geçersiz kılma mesaj istatistikleri
cache_resets bigint Önbellek sıfırlama sayısı

G.2.4.3. pgpro_stats_inval_status

pgpro_stats_inval_status görünümü, önbellek geçersiz kılma durumu hakkında bilgi sağlar. Bu görünüm, önbellek performansını analiz etmek için kullanılır.

Sütun Tip Açıklama
num_inval_queue_cleanups bigint Önbellek geçersiz kılma kuyruğu temizleme sayısı
num_inval_queue_resets bigint Önbellek geçersiz kılma kuyruğu sıfırlama sayısı

G.2.5. Veri Tipleri

pgpro_stats uzantısı, istatistikleri temsil etmek için özel veri tipleri kullanır. Bu tipler, sorgu planları, bekleme olayları ve kaynak kullanım bilgilerini içerir.

G.2.5.1. pgpro_stats_inval_msgs

pgpro_stats_inval_msgs veri tipi, önbellek geçersiz kılma mesaj istatistiklerini temsil eder. Bu tip, pgpro_stats_statements ve pgpro_stats_totals görünümlerinde kullanılır.

Alan Tip Açıklama
total bigint Toplam geçersiz kılma mesaj sayısı
catcache bigint Katalog önbelleği seçici geçersiz kılma mesaj sayısı
catalog bigint Katalog önbelleği tam geçersiz kılma mesaj sayısı
relcache bigint İlişki önbelleği seçici geçersiz kılma mesaj sayısı
relcache_all bigint İlişki önbelleği tam geçersiz kılma mesaj sayısı
smgr bigint İlişki dosyalarının açık dosyalarını geçersiz kılan mesaj sayısı. Mesajlar kuyruğa eklendiğinde artar
relmap bigint İlişki haritası önbelleği geçersiz kılma mesaj sayısı. Mesajlar kuyruğa gönderildiğinde artar
snapshot bigint Katalog anlık görüntüsü geçersiz kılma mesaj sayısı

G.2.5.2. pgpro_stats_rusage

pgpro_stats_rusage veri tipi, kaynak kullanım istatistiklerini temsil eder. Bu tip, CPU ve I/O kullanım bilgilerini içerir.

Alan Tip Açıklama
user_time double precision Kullanıcı alanında CPU'da harcanan süre (saniye)
system_time double precision Sistem alanında CPU'da harcanan süre (saniye)
read_bytes bigint Okunan bayt sayısı
write_bytes bigint Yazılan bayt sayısı

G.2.5.3. pgpro_stats_wait_events

pgpro_stats_wait_events veri tipi, bekleme olayları istatistiklerini temsil eder. Bu tip, farklı bekleme olay türleri için bekleme sürelerini içerir.

Alan Tip Açıklama
wait_event_type text Bekleme olay türü
wait_event text Bekleme olay adı
wait_time double precision Bekleme süresi (saniye)

G.2.6. Fonksiyonlar

pgpro_stats uzantısı, istatistikleri yönetmek ve sıfırlamak için çeşitli fonksiyonlar sağlar:

G.2.6.1. pgpro_stats_statements_reset

pgpro_stats_statements_reset([userid oid], [dbid oid], [queryid bigint])

Belirtilen kriterlere göre istatistikleri sıfırlar. Parametreler belirtilmezse, tüm istatistikler sıfırlanır.

<strong>Parametreler:</strong>

  • userid — İstatistikleri sıfırlanacak kullanıcının OID'si (opsiyonel)
  • dbid — İstatistikleri sıfırlanacak veritabanının OID'si (opsiyonel)
  • queryid — İstatistikleri sıfırlanacak sorgunun queryid'si (opsiyonel)

<strong>Dönen Değer:</strong> void

<strong>Örnek:</strong>

-- Tüm istatistikleri sıfırla
SELECT pgpro_stats_statements_reset();

-- Belirli bir veritabanı için istatistikleri sıfırla
SELECT pgpro_stats_statements_reset(dbid := (SELECT oid FROM pg_database WHERE datname = 'mydb'));

-- Belirli bir kullanıcı için istatistikleri sıfırla
SELECT pgpro_stats_statements_reset(userid := (SELECT oid FROM pg_user WHERE usename = 'myuser'));

Not: pg_user görünümü hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.

G.2.6.2. pgpro_stats_totals_reset

pgpro_stats_totals_reset([dbid oid], [userid oid], [client_node text], [application text])

pgpro_stats_totals görünümündeki toplam istatistikleri sıfırlar.

<strong>Parametreler:</strong>

  • dbid — Veritabanı OID'si (opsiyonel)
  • userid — Kullanıcı OID'si (opsiyonel)
  • client_node — İstemci düğüm adı (opsiyonel)
  • application — Uygulama adı (opsiyonel)

G.2.6.3. pgpro_stats_inval_status

pgpro_stats_inval_status() returns record

pgpro_stats_inval_status görünümünü tanımlar. Bu fonksiyon, önbellek geçersiz kılma durumu hakkında bilgi döndürür.

<strong>Dönen Değer:</strong> record (num_inval_queue_cleanups bigint, num_inval_queue_resets bigint)

G.2.7. Yapılandırma Parametreleri

pgpro_stats uzantısı aşağıdaki yapılandırma parametrelerini destekler. Bu parametreler postgresql.conf dosyasında veya ALTER SYSTEM komutu ile ayarlanabilir:

G.2.7.1. pgpro_stats.max

<strong>Tip:</strong> integer

<strong>Varsayılan:</strong> 5000

Saklanacak maksimum normalleştirilmiş ifade sayısı. Bu sayıya ulaşıldığında, en az kullanılan ifadeler otomatik olarak kaldırılır. Bu parametre, paylaşılan bellek kullanımını kontrol etmek için kullanılır.

<strong>Not:</strong> Bu parametrenin değeri, paylaşılan bellek kullanımını doğrudan etkiler. Daha yüksek değerler daha fazla bellek kullanır, ancak daha fazla sorgu istatistiği saklanır.

G.2.7.2. pgpro_stats.track

<strong>Tip:</strong> enum ('all', 'top', 'none')

<strong>Varsayılan:</strong> 'all'

Hangi ifadelerin izleneceğini belirler:

  • all — Tüm ifadeler izlenir
  • top — Sadece en üst ifadeler izlenir (en çok kaynak kullananlar)
  • none — Hiçbir ifade izlenmez

G.2.7.3. pgpro_stats.track_planning

<strong>Tip:</strong> boolean

<strong>Varsayılan:</strong> on

Planlama istatistiklerinin toplanıp toplanmayacağını belirler. Bu parametre 'off' olarak ayarlandığında, planlama süresi ve plan bilgileri toplanmaz, bu da bellek kullanımını azaltır.

G.2.7.4. pgpro_stats.track_utility

<strong>Tip:</strong> boolean

<strong>Varsayılan:</strong> on

Yardımcı komutların (DDL, DCL vb.) izlenip izlenmeyeceğini belirler.

G.2.7.5. pgpro_stats.save

<strong>Tip:</strong> boolean

<strong>Varsayılan:</strong> on

Sunucu durdurulduğunda istatistiklerin diske kaydedilip kaydedilmeyeceğini belirler. Bu parametre 'off' olarak ayarlandığında, sunucu yeniden başlatıldığında istatistikler kaybolur.

G.2.7.6. pgpro_stats.track_io_timing

<strong>Tip:</strong> boolean

<strong>Varsayılan:</strong> on (track_io_timing etkinse)

I/O zamanlama istatistiklerinin toplanıp toplanmayacağını belirler. Bu parametre, PostgreSQL'in track_io_timing parametresine bağlıdır.

G.2.8. Uygulama Oturum İzleme

pgpro_stats uzantısı, belirli uygulama oturumlarını izlemenize olanak tanır. Bu özellik, belirli bir uygulama veya kullanıcı için sorgu performansını analiz etmek için kullanışlıdır. Oturum izleme, belirli uygulamalar, kullanıcılar veya istemci düğümleri için detaylı istatistikler toplamanıza olanak tanır.

G.2.8.1. Oturum İzlemeyi Etkinleştirme

Oturum izlemeyi etkinleştirmek için, pgpro_stats.enable_tracing parametresini 'on' olarak ayarlayın:

ALTER SYSTEM SET pgpro_stats.enable_tracing = 'on';
SELECT pg_reload_conf();

Not: ALTER SYSTEM ve pg_reload_conf() hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.

G.2.8.2. İzlenecek Oturumları Belirleme

İzlenecek oturumları belirlemek için, pgpro_stats.trace_application, pgpro_stats.trace_user veya pgpro_stats.trace_client_node parametrelerini kullanabilirsiniz:

-- Belirli bir uygulama için izleme
ALTER SYSTEM SET pgpro_stats.trace_application = 'myapp';
SELECT pg_reload_conf();

-- Belirli bir kullanıcı için izleme
ALTER SYSTEM SET pgpro_stats.trace_user = 'myuser';
SELECT pg_reload_conf();

-- Belirli bir istemci düğümü için izleme
ALTER SYSTEM SET pgpro_stats.trace_client_node = '192.168.1.100';
SELECT pg_reload_conf();

Not: ALTER SYSTEM ve pg_reload_conf() hakkında daha fazla bilgi için PostgreSQL dokümantasyonuna bakın.

G.2.8.3. İzleme Parametreleri

Parametre Tip Varsayılan Açıklama
pgpro_stats.enable_tracing boolean off Oturum izlemeyi etkinleştirir/devre dışı bırakır
pgpro_stats.trace_application text NULL İzlenecek uygulama adı
pgpro_stats.trace_user text NULL İzlenecek kullanıcı adı
pgpro_stats.trace_client_node text NULL İzlenecek istemci düğüm adı veya IP adresi

<strong>Not:</strong> Oturum izleme, performans üzerinde ek yük oluşturabilir. Sadece gerekli olduğunda etkinleştirin ve izleme tamamlandıktan sonra devre dışı bırakın.

G.2.9. Önbellek Geçersiz Kılma Metrikleri

pgpro_stats uzantısı, önbellek geçersiz kılma mesajlarının istatistiklerini toplar. Bu metrikler, önbellek performansını analiz etmek ve potansiyel sorunları tespit etmek için kullanılabilir. Önbellek geçersiz kılma, PostgreSQL'in iç önbelleklerini (katalog önbelleği, ilişki önbelleği vb.) güncellemek için kullanılan mekanizmadır.

G.2.9.1. Önbellek Geçersiz Kılma İstatistiklerini Görüntüleme

Önbellek geçersiz kılma istatistikleri, pgpro_stats_inval_msgs veri tipi ve pgpro_stats_inval_status görünümü aracılığıyla erişilebilir. pgpro_stats_statements ve pgpro_stats_totals görünümlerinde de inval_msgs sütunu bulunur.

-- Önbellek geçersiz kılma durumunu görüntüle
SELECT * FROM pgpro_stats_inval_status();

-- Belirli bir ifade için geçersiz kılma mesajlarını görüntüle
SELECT queryid, query, inval_msgs
FROM pgpro_stats_statements
WHERE inval_msgs.total > 0
ORDER BY inval_msgs.total DESC
LIMIT 10;

G.2.9.2. Önbellek Geçersiz Kılma Sorunlarını Tespit Etme

pgpro_stats_inval_status görünümündeki num_inval_queue_cleanups ve num_inval_queue_resets sütunları, önbellek geçersiz kılma kuyruğunun durumunu gösterir. Bu metrikler, önbellek performans sorunlarını tespit etmek için kullanılabilir:

  • Eğer num_inval_queue_cleanups belirli bir süre boyunca önemli ölçüde artıyorsa, ancak num_inval_queue_resets artmıyorsa, bu, backend'lerin geçersiz kılma mesajlarını işlediğini, ancak yeterince hızlı olmadığını gösterir.
  • Eğer num_inval_queue_cleanups önemli ölçüde artmıyorsa, ancak num_inval_queue_resets artıyorsa, bu, backend'lerin geçersiz kılma mesajlarını işlemede gecikme yaşadığını gösterir.
  • Eğer her iki sayaç da önemli ölçüde artıyorsa, bu, backend'lerin geçersiz kılma mesajlarını işlemede çok yavaş olduğunu ve kuyruğun taştığını gösterir.

Hangi backend'lerin geçersiz kılma mesajlarını işlemede gecikme yaşadığını belirlemek için, pgpro_stats_totals görünümündeki cache_resets sütununu kullanabilirsiniz.

-- En çok önbellek sıfırlaması yapan backend'leri bul
SELECT dbid, userid, client_node, application, cache_resets
FROM pgpro_stats_totals
WHERE cache_resets > 0
ORDER BY cache_resets DESC
LIMIT 10;

G.2.9.3. pgpro_stats_inval_msgs Veri Tipi

pgpro_stats_inval_msgs veri tipi, farklı türdeki geçersiz kılma mesajlarının sayısını içerir. Bu tip, pgpro_stats_statements ve pgpro_stats_totals görünümlerinde inval_msgs sütunu olarak kullanılır.

pgpro_stats_inval_msgs veri tipinin alanları Tablo G.85'te listelenmiştir (yukarıda G.2.5.1 bölümünde).

G.2.10. Yazarlar

pgpro_stats uzantısı Postgres Professional tarafından geliştirilmiştir.

<strong>Postgres Professional</strong><br/>Moskova, Rusya<br/><a href="https://postgrespro.com" target="_blank">https://postgrespro.com</a>