Bagaimana cara melihat kueri postgres pemblokiran penuh?


9

Saya menggunakan pernyataan dari halaman ini untuk melihat pemblokiran pertanyaan di 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;

Namun kueri terpotong sehingga saya biasanya tidak bisa melihat apa yang ada di WHEREklausa yang membuat debugging masalah pemblokiran ini sangat sulit. Apakah ada pengaturan di mana saya dapat memberi tahu postgres untuk mencatat semua pertanyaanpg_stat_activity

Jawaban:


11

Panjang kueri yang dilacak dapat ditemukan di parameter track_activity_query_size.

18.8.1. Kolektor Statistik Kueri dan Indeks

track_activity_query_size (integer)

Menentukan jumlah byte yang dipesan untuk melacak perintah yang sedang dijalankan untuk setiap sesi aktif, untuk pg_stat_activity.current_querybidang. Nilai standarnya adalah 1024 . Parameter ini hanya dapat ditetapkan saat server mulai.

mis. jika Anda memiliki track_activity_query_size=16384konfigurasi Anda, maka ini berarti bahwa teks permintaan hingga 16k akan dikumpulkan.


1
Hanya untuk memastikan itu jelas (seperti yang tercantum dalam kutipan, yang mungkin diabaikan) .. mengubah opsi konfigurasi akan memerlukan server restart agar dapat berlaku.
Joishi Bodio
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.