PostgreSQL Proseslerin İzlenmesi

PostgreSQL Proseslerin İzlenmesi, istemci bağlantılarından sorgu yürütme işlemlerine kadar her iş için ayrı bir süreç (process) oluşturur. Proseslerin izlenmesi, veri tabanı etkinliklerini anlamak, performans sorunlarını çözmek ve veri tabanı sunucusunu optimize etmek için kritik bir adımdır. Bu bölümde PostgreSQL proseslerinin nasıl izleneceği ve yönetileceği ele alınacaktır.

1. PostgreSQL Proses Mimarisi

PostgreSQL, çok süreçli bir mimariye sahiptir. Her istemci bağlantısı için bir süreç oluşturulur ve bu süreç, istemcinin tüm işlemlerini yönetir. Proses yapısı şu bileşenleri içerir:

Ana Süreç (Postmaster): PostgreSQL sunucusunun başlatılmasından ve tüm alt süreçlerin yönetilmesinden sorumludur.
İstemci Süreçleri: Her istemci bağlantısı için bir süreç oluşturulur. Bu süreç, istemciyle iletişim kurar ve sorguları yürütür.
Arka Plan Süreçleri: Veri tabanı bakımı ve performansı için çalışan yardımcı süreçlerdir. Örnekler:

autovacuum: Otomatik vakum işlemi.
wal_writer: WAL (Write-Ahead Logging) verilerini diske yazma.
bgwriter: Paylaşılan tamponları (shared buffers) diske yazma.
checkpointer: Kontrollü nokta (checkpoint) oluşturma.

2. Proseslerin İzlenmesi

PostgreSQL proseslerini izlemek için hem sistem araçları hem de PostgreSQL’in yerleşik sorgu araçları kullanılabilir.

a) Sistem Araçlarıyla İzleme

• Linux ps Komutu:
PostgreSQL’e ait tüm süreçleri görmek için şu komut kullanılabilir:

ps aux | grep postgres

Çıktı, her sürecin ne yaptığına dair bilgi içerir. Örnek:

postgres 1234 0.0 0.1 123456 5678 ? Ss 12:34 0:00 postgres: checkpointer process
postgres 1235 0.0 0.1 123456 5678 ? Ss 12:34 0:00 postgres: autovacuum launcher
postgres 1236 0.0 0.1 123456 5678 ? Ss 12:34 0:00 postgres: wal writer process

• htop veya top Kullanımı:
Bu araçlar, PostgreSQL süreçlerinin CPU ve bellek kullanımlarını gerçek zamanlı olarak izlemek için kullanılabilir.

top -u postgres

b) PostgreSQL Yerleşik Araçlarıyla İzleme

• pg_stat_activity:
PostgreSQL’deki mevcut bağlantıları ve işlemleri izlemek için kullanılır:

SELECT * FROM pg_stat_activity;

Önemli sütunlar:
• datname: Veritabanı adı.
• usename: Kullanıcı adı.
• application_name: Bağlantı yapan uygulama.
• state: Bağlantı durumu (örneğin: active, idle).
• query: Yürütülen sorgu.
Örnek Çıktı:

datname | usename | application_name | state | query
——— | ——– | —————- | —— | ———————————
mydb | postgres | psql | active | SELECT * FROM pg_stat_activity;

pg_stat_activity

• Sorguları Filtreleme:
Sadece aktif sorguları görmek için:

SELECT pid, usename, query, state
FROM pg_stat_activity
WHERE state = 'active';

• Uzun Süreli Sorguları Bulma:
Veri tabanında uzun süredir devam eden sorguları tespit etmek için:

SELECT pid, usename, now() - query_start AS duration, query
FROM pg_stat_activity
WHERE state = 'active'
AND now() - query_start > interval '5 minutes';

3. Problemli Proseslerin Yönetimi

Problemli süreçlerin sonlandırılması gerekebilir. Bunun için PostgreSQL veya işletim sistemi araçları kullanılabilir.

• Sorgu Süreçlerini Sonlandırma (pg_terminate_backend):
Problemli bir sorguyu sonlandırmak için şu komut kullanılabilir:

SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid = 12345;

Not: Bu işlem sırasında açık işlemler geri alınabilir (rollback).

• pg_cancel_backend:
Bir sorguyu sonlandırmak, ancak bağlantıyı açık tutmak için:

SELECT pg_cancel_backend(pid)
FROM pg_stat_activity
WHERE pid = 12345;

4. Performans İzleme ve Optimizasyon

PostgreSQL’in performansını analiz etmek için aşağıdaki araçlar ve teknikler kullanılabilir:

• pg_stat_statements:
En çok kullanılan ve en çok kaynak tüketen sorguları tespit eder:

SELECT query, calls, total_time, rows
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 10;

• Otomatik Vakum İzleme:
Otomatik vakum işlemlerinin durumunu görmek için:

SELECT relname, last_autovacuum, last_analyze
FROM pg_stat_all_tables;

• Disk Giriş/Çıkışı İzleme:
Arka plan yazma süreçlerinin etkinliğini izlemek için:

SELECT * FROM pg_stat_bgwriter;

5. Güvenlik ve Yetkilendirme

PostgreSQL süreçlerine yalnızca yetkili kullanıcılar erişebilmelidir. Veri tabanı güvenliğini artırmak için:

• PostgreSQL süreçlerinin çalıştığı kullanıcı (örneğin postgres) yalnızca yetkili işlemler için kullanılmalıdır.
• pg_stat_activity sorgularına erişimi sınırlamak için gerekli yetkilendirme yapılmalıdır.

Sonuç

PostgreSQL süreçlerini izlemek, hem sorun giderme hem de performans optimizasyonu için hayati öneme sahiptir. Sistem araçları ve PostgreSQL’in yerleşik sorgu araçları, süreçlerin durumunu ve etkinliğini anlamak için güçlü bir temel sunar.

Hasanipek.org

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir