วิธีดูข้อความค้นหา postgres แบบเต็มบล็อก


9

ฉันใช้ข้อความจากหน้านี้เพื่อดูการบล็อกข้อความค้นหาใน Postgres

SELECT bl.pid                 AS blocked_pid,
         a.usename              AS blocked_user,
         ka.query               AS blocking_statement,
         now() - ka.query_start AS blocking_duration,
         kl.pid                 AS blocking_pid,
         ka.usename             AS blocking_user,
         a.query                AS blocked_statement,
         now() - a.query_start  AS blocked_duration
  FROM  pg_catalog.pg_locks         bl
   JOIN pg_catalog.pg_stat_activity a  ON a.pid = bl.pid
   JOIN pg_catalog.pg_locks         kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
   JOIN pg_catalog.pg_stat_activity ka ON ka.pid = kl.pid
  WHERE NOT bl.granted;

อย่างไรก็ตามคำสั่งจะถูกตัดทอนดังนั้นฉันมักจะไม่เห็นสิ่งที่อยู่ในWHEREข้อซึ่งทำให้การแก้จุดบกพร่องปัญหาการบล็อกเหล่านี้ยากมาก มีการตั้งค่าที่ฉันสามารถบอก postgres เพื่อบันทึกการสืบค้นแบบเต็มpg_stat_activity

คำตอบ:


11

track_activity_query_sizeความยาวของแบบสอบถามการติดตามสามารถพบได้ในพารามิเตอร์

18.8.1 ตัวรวบรวมสถิติแบบสอบถามและดัชนี

track_activity_query_size (integer)

ระบุจำนวนไบต์ที่สงวนไว้เพื่อติดตามคำสั่งการดำเนินการในปัจจุบันสำหรับแต่ละเซสชันที่ใช้งานอยู่สำหรับ pg_stat_activity.current_queryฟิลด์ ค่าเริ่มต้นคือ1024 พารามิเตอร์นี้สามารถตั้งค่าได้ที่เซิร์ฟเวอร์เริ่มต้นเท่านั้น

เช่นหากคุณมีการกำหนดค่าtrack_activity_query_size=16384ของคุณนี่จะหมายความว่าจะรวบรวมข้อความค้นหาที่มีขนาดสูงสุด 16k


1
เพียงเพื่อให้แน่ใจว่าชัดเจน (ตามที่ระบุไว้ในเครื่องหมายคำพูดซึ่งอาจมองข้ามไป) .. การเปลี่ยนตัวเลือกการกำหนดค่าจะต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อให้มีผล
Joishi Bodio
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.