PostgreSQL Uzun Süren Sorguları Bulma ve Kill Etme

Bu makalemde sizlere, çok fazla sorulan sorulardan olan PostgreSQL veritabanı sisteminde uzun süre çalışan sorguları bulmayı ve düşürebileceğiniz session ları belirleyip nasıl düşüreceğinizi anlatacağım.

Bu süreci periyodik olarak loglamanız da fayda var ve makaleyi okurken bu noktayıda düşünüp alert mekanizmalarınızı tasarlamanızda fayda var arkadaşlar.

Zaman zaman PostgreSQL veritabanımızda süresiz çalışan bir sorgu olup olmadığını araştırmamız gerekir.
Bu uzun süren sorgular, genel veritabanı performansına müdahale edebilir ve muhtemelen bazı arka plan işlemlerinde takılı kalırlar.
Bunları bulmak için aşağıdaki sorguyu kullanabilirsiniz.

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

Sorgu sonucunda ilk kolon bize session id yi veriyor, diğer kolonlarda ise çalışma süresi , çalışan query bilgisi ve durumu gibi veriler döndürmektedir. Yukarıda ki sorguda 5 dakikadan uzun süren sorguları bize döndürmektedir.

Bu tarz askıda kalmış veya süresiz çalışmaya çalışan sorgularınızı belirleyip pg_cancel_backend ile düşürmeniz gerekmektedir.

Uzun süren sorguların pid lerini pg_cancel_backend ile düşürebilirsiniz.

SELECT pg_cancel_backend(__pid__);

Pid parametresi pg_stat_activity seçiminde döndürülen değerdir.
Pg_cancel_backend komutunu kullanarak sorguyu tamamen durdurmak birkaç saniye sürebilir.

Teşekkürler.

Leave a Reply

Your email address will not be published. Required fields are marked *