pg_wait_sampling, Postgres Pro için bekleme olaylarına ilişkin periyodik istatistik toplama uzantısıdır.

Postgres Pro Enterprise'ın 9.6 sürümünden başlayarak, belirli süreçler için mevcut bekleme olayları hakkında bilgi sağlar. Ancak, sunucu aktivitesinin yararlı genel istatistiklerini elde etmek için, bekleme olaylarına ilişkin okumaları birden fazla kez almak gerekir. pg_wait_sampling uzantısı, özel bir çalışan süreç başlatarak bekleme olaylarına ilişkin okumaları otomatikleştirir. pg_wait_sampling uzantısı etkinleştirildiğinde, aşağıdaki periyodik olarak toplanan bilgileri alabilirsiniz:

  • <strong>Bekleme geçmişi</strong> — zaman damgalı son süreçler için bekleme olayları listesi.
  • <strong>Bekleme profili</strong> — tüm süreçler için gözlemlenen bekleme olaylarının sayısı (olay türlerine göre).
  • Arka plan çalışan süreçleri dahil olmak üzere tüm süreçler için mevcut bekleme olayları.

pg_wait_sampling kullanarak, beklenenden daha uzun süren sorgular için bağımlılık sorunlarını tespit edebilirsiniz. Herhangi bir zamanda bekleme durumundaki süreçleri görebilir ve bekleme olayları istatistiklerini analiz edebilirsiniz. Olası bekleme olaylarının listesi Tablo 28.4'te verilmiştir.

pg_stat_statements ile birlikte, bu uzantı ayrıca her sorgu için istatistikler sağlayabilir.

<strong>Ayrıca Bakınız</strong><br/>Bekleme olayları istatistiklerini görüntüleme<br/>Referans

F.66.1. Kurulum

pg_wait_sampling uzantısı Postgres Pro Enterprise'ın bir parçasıdır ve özel gereksinimleri yoktur.

pg_wait_sampling'ı etkinleştirmek için aşağıdakileri yapın:

  1. postgresql.conf dosyasındaki shared_preload_libraries değişkenine pg_wait_sampling ekleyin:
    shared_preload_libraries = 'pg_wait_sampling'

Önemli: pg_wait_sampling kullanırken, shared_preload_libraries parametresini değiştirdikten sonra sunucuyu yeniden başlatmanız gerekir. Bu parametre, sunucu başlatıldığında yüklenen kütüphaneleri belirler.

Sunucu başlatıldıktan sonra, uzantıyı veritabanında oluşturun:

CREATE EXTENSION pg_wait_sampling;

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

Uzantı, her veritabanında ayrı ayrı oluşturulmalıdır. Uzantıyı kullanmak istediğiniz her veritabanında CREATE EXTENSION komutunu çalıştırın.

F.66.2. Kullanım

pg_wait_sampling uzantısı etkinleştirildikten sonra, bekleme olayları istatistiklerini görüntülemek için pg_wait_sampling_current, pg_wait_sampling_history ve pg_wait_sampling_profile görünümlerini kullanabilirsiniz.

F.66.2.1. Mevcut Bekleme Olaylarını Görüntüleme

Tüm süreçler için mevcut bekleme olaylarını görüntülemek için:

SELECT * FROM pg_wait_sampling_current;

Belirli bir süreç için mevcut bekleme olaylarını görüntülemek için:

SELECT * FROM pg_wait_sampling_current WHERE pid = 12345;

F.66.2.2. Bekleme Geçmişini Görüntüleme

Bekleme olayları geçmişini görüntülemek için:

SELECT * FROM pg_wait_sampling_history
ORDER BY ts DESC
LIMIT 100;

Belirli bir süreç için bekleme geçmişini görüntülemek için:

SELECT * FROM pg_wait_sampling_history
WHERE pid = 12345
ORDER BY ts DESC;

F.66.2.3. Bekleme Profilini Görüntüleme

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

SELECT 
    event_type,
    event,
    SUM(count) as total_count
FROM pg_wait_sampling_profile
GROUP BY event_type, event
ORDER BY total_count DESC;

Belirli bir süreç için bekleme profilini görüntülemek için:

SELECT * FROM pg_wait_sampling_profile
WHERE pid = 12345
ORDER BY count DESC;

F.66.2.4. Profili Sıfırlama

Bekleme profilini sıfırlamak için pg_wait_sampling_reset_profile() fonksiyonunu kullanın:

SELECT pg_wait_sampling_reset_profile();

F.66.3. Referans

Bu bölüm, pg_wait_sampling uzantısının yapılandırma parametreleri, görünümleri ve fonksiyonları hakkında detaylı bilgi sağlar.

F.66.3.1. Yapılandırma Parametreleri

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

F.66.3.1.1. pg_wait_sampling.history_size

<strong>Tip:</strong> integer

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

Bekleme geçmişi için kullanılan döngüsel tamponun boyutu. Bu parametre, pg_wait_sampling_history görünümünde saklanan maksimum kayıt sayısını belirler.

F.66.3.1.2. pg_wait_sampling.profile_per_process

<strong>Tip:</strong> boolean

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

Bekleme profilinin süreç başına mı yoksa global mi olacağını belirler. true olarak ayarlandığında, her süreç için ayrı bir profil tutulur. false olarak ayarlandığında, tüm süreçler için tek bir global profil tutulur.

F.66.3.1.3. pg_wait_sampling.profile_queries

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

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

Sorgu kimliklerinin kaydedilip kaydedilmeyeceğini belirler. none değerine ayarlandığında, görünümlerdeki queryid alanı sıfır olur. top olarak ayarlandığında, yalnızca üst düzey sorgu kimlikleri kaydedilir. all olarak ayarlandığında, iç içe sorgu kimlikleri kaydedilir. Her sorgu için bekleme profilini toplamak için, pg_stat_statements uzantısının yapılandırıldığından ve pg_wait_sampling.profile_queries'in top olarak ayarlandığından emin olun. Sürüm 14 veya üzeri için, compute_query_id parametresini yapılandırarak ve pg_wait_sampling.profile_queries'i top veya all olarak ayarlayarak sorgu kimliklerini hesaplamak mümkündür. Detaylar için Alt Bölüm 19.9.2'ye bakın.

F.66.3.1.4. pg_wait_sampling.sample_cpu

<strong>Tip:</strong> boolean

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

Şu anda işlemci tarafından işlenen süreçler hakkında okumaların toplanıp toplanmayacağını belirleyen örnekleme modu. pg_wait_sampling.sample_cpu true olarak ayarlandığında, örnekleme ayrıca hiçbir şey beklemeyen süreçleri de içerir. Bu tür süreçler için bekleme olayı sütunları NULL değerine sahip olacaktır.

F.66.3.2. pg_wait_sampling Görünümleri

pg_wait_sampling uzantısı, bekleme olayları istatistiklerini görüntülemek için aşağıdaki görünümleri sağlar:

F.66.3.2.1. pg_wait_sampling_current Görünümü

pg_wait_sampling_current görünümü, arka plan çalışan süreçleri dahil olmak üzere tüm süreçler için mevcut bekleme olayları hakkında bilgi sağlar.

Tablo F.49. pg_wait_sampling_current görünümü

Sütun Adı Sütun Tipi Açıklama
pid int4 Süreç tanımlayıcısı
event_type text Bekleme olay türü adı
event text Bekleme olayı adı
queryid int8 Sorgu tanımlayıcısı

F.66.3.2.2. pg_wait_sampling_history Görünümü

pg_wait_sampling_history görünümü, bekleme olayları geçmişini içerir. Bu veriler bellekte döngüsel bir tamponda saklanır.

Tablo F.50. pg_wait_sampling_history görünümü

Sütun Adı Sütun Tipi Açıklama
pid int4 Süreç tanımlayıcısı
ts timestamptz Okuma zamanı
event_type text Bekleme olay türü adı
event text Bekleme olayı adı
queryid int8 Sorgu tanımlayıcısı

F.66.3.2.3. pg_wait_sampling_profile Görünümü

pg_wait_sampling_profile görünümü, bekleme olayları profilini içerir. Bu veriler bellekte bir hash tablosu olarak saklanır.

Tablo F.51. pg_wait_sampling_profile görünümü

Sütun Adı Sütun Tipi Açıklama
pid int4 Süreç tanımlayıcısı
event_type text Bekleme olay türü adı
event text Bekleme olayı adı
queryid int8 Sorgu tanımlayıcısı
count int8 Gözlem sayısı

F.66.3.3. Fonksiyonlar

pg_wait_sampling uzantısı, bekleme olayları istatistiklerini yönetmek için aşağıdaki fonksiyonları sağlar:

F.66.3.3.1. pg_wait_sampling_get_current

pg_wait_sampling_get_current([pid int4]) returns setof record

pg_wait_sampling_current görünümünü, mevcut bekleme olayları listesiyle döndürür. pid argümanını belirtirseniz, görünüm belirtilen tanımlayıcıya sahip süreç için filtrelenir.

<strong>Parametreler:</strong>

  • pid — İsteğe bağlı parametre. Mevcut bekleme olaylarının gösterileceği sürecin tanımlayıcısı

<strong>Dönen Değer:</strong> setof record (pid int4, event_type text, event text, queryid int8)

<strong>Örnek:</strong>

-- Tüm süreçler için mevcut bekleme olaylarını al
SELECT * FROM pg_wait_sampling_get_current();

-- Belirli bir süreç için mevcut bekleme olaylarını al
SELECT * FROM pg_wait_sampling_get_current(12345);

F.66.3.3.2. pg_wait_sampling_reset_profile

pg_wait_sampling_reset_profile() returns void

Bekleme profilini sıfırlar ve belleği temizler.

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

<strong>Örnek:</strong>

-- Bekleme profilini sıfırla
SELECT pg_wait_sampling_reset_profile();

F.66.4. Yazarlar

pg_wait_sampling uzantısı aşağıdaki kişiler tarafından geliştirilmiştir:

  • Alexander Korotkov
  • Ildus Kurbangaliev <i.kurbangaliev@gmail.com>