How to find and kill an advisory lock query?
เมื่อรัน application หรือ query database postgreSQL แล้วพบ “advisory lock” เราจำเป็นต้องตรวจสอบ query ที่ทำให้เกิด Lock และ kill query นั้นทิ้ง เพื่อให้ระบบสามารถืำงานได้ต่อ
วิธีการตรวจสอบและแก้ไข
ใช้คำสั่งด้านล่างนี้เพื่อตรวจสอบ PID ที่ทำให้เกิด “advisory lock”
SELECT * FROM pg_locks JOIN pg_stat_activity USING (pid) WHERE locktype='advisory';
หลังจากรันคำสั่งแล้วจะได้ค่า PID มา ซึ่งจำเป็นต้อง terminate PID นี้ โดยให้รันคำสั่ง
SELECT pg_cancel_backend(PID);
PID คือเลข PID ที่ได้จากรันคำสั่งค้นหา advisory lock
แต่ถ้าหากยังไม่สามารถ terminate PID นี้ได้ ให้ใช้คำสั่งด้านล่างนี้แทน
SELECT pg_terminate_backend(PID);