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.

Loading