dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Scripts Library/postgresql/#1
Script #1
postgresql
Performanceread-onlyMin Version: 9.6

Find Long-Running Queries and Idle-in-Transaction Sessions in PostgreSQL

Lists queries running longer than a minute, their wait events, and idle-in-transaction sessions that block vacuum. The first script to run during a performance incident.

#pg_stat_activity#long-running#sessions#incident
postgresql · sql
SELECT pid, usename, datname, state,
       now() - query_start AS query_age,
       now() - xact_start  AS xact_age,
       wait_event_type, wait_event,
       left(query, 200) AS query
FROM pg_stat_activity
WHERE pid <> pg_backend_pid()
  AND state <> 'idle'
  AND now() - query_start > interval '1 minute'
ORDER BY query_start;
Operational Notes & Remediation Guidance

`idle in transaction` sessions block vacuum. To terminate them (write action), run `SELECT pg_cancel_backend(pid);`, or `pg_terminate_backend(pid)` if it does not respond.

Production Safety & Execution Standards
  • This script is designed for read-only diagnostics; it does not alter schema or modify data directly.
  • Prior to executing on production systems under high load, verify the target database version (Min. Version: 9.6).
  • Exercise caution with mutating actions (e.g., terminating sessions or dropping indexes) referenced in the notes section.