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;

• 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.