PostgreSQL de Uzun Süren Sorguları Bulmak

Makalemizin esas amacı problem anında uzun süren veya lock yapan sorguları bulup , o session ları nasıl düşürüp sistemi rahatlatırız sorusuna cevap vermektir.

İlk etapta sistemimizde 1 dakikadan uzun süredir işlem yapan sorguları bulmak istiyoruz ve bunun için aşağıda hazırladığımız scripti EXEC edip sonucuna bakıyoruz.

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

NOT : 2 dakikadan uzun süren query leri görmek isteseydik ‘interval 1 minutes’ bölümünü 1 yerine 2 yapacaktık.

Eğer sistemimizde kitlenmeler var ise ve ExclusiveLock olan sorguları bulup düşürmemiz gerekiyor ise ;

SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid where mode ='ExclusiveLock';

bu script ile ExclusiveLock yapan sorguları bulup pid lerine erişebiliriz.

Bu zaman kadar sıkıntı çıkaran query leri bulma işlemini hızlıca hallettik. Evet bunları bulduk ama nasıl düşüreceğiz onu bilmiyoruz henüz. iki tip işlemi ele alacağız bu aşamada.

İlk aşama sorguyu durdurmak ikincisi ise sorguyu kill etmek.

pg_cancel_backend komutu ile sorguyu durdurabiliriz.

SELECT pg_cancel_backend (pid);

bu komut ile durdurma sürecini gerçekleştirebiliyoruz. pid yi yukarıda sıkıntılı sorguları bulma scriptlerimizden elde ediyoruz.

pg_terminate_backend komutu ile de kill etme operasyonunu gerçekleştirebiliyoruz.

SELECT pg_terminate_backend (pid);

Bu komutu kullanırken dikkat ediniz.

 

Kolay Gelsin.

Leave a Reply

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