Postgresql de uzun süren sorguları bulmak ve kill etmek
Postgresql de uzun süren sorguları bulmak ve kill etmek, Veritabanın performansını izlemek veya anlık lockları bulup kill etmek için ya da modifiye etmek için aşağıdaki sorgulardan faydalanabilirsiniz.
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';
Yukarıdaki komutta 5 dakikadan uzun süren sorguları getirir.Aşağıdaki komut yardımı ile ExclusiveLock olan sorguları bulmanıza yardımcı olur.
SELECT * FROM pg_locks pl LEFT JOIN pg_stat_activity psa ON pl.pid = psa.pid where mode ='ExclusiveLock';
Yukarıdaki sorgular yardımı ile sorgunuzu buldunuz ve sorgunuza ait pid(processes id) değerini öğrendikten sonra aşağıdaki komut yardımı ile durdurabilirsiniz.
SELECT pg_cancel_backend (__ pid__);
Sorguyu tamamen pg_cancel_backend komutunu kullanarak durdurmak birkaç saniye sürebilir .
Yada aşağıdaki komutu kullanarak direk o session’ı kill edebilirsiniz .
SELECT pg_terminate_backend (__ pid__);
pg_terminate_backend komutu tutarsızlığa neden olabilir , dikkatli kullanmanızı tavsiye ederim.