Skip to content

Instantly share code, notes, and snippets.

@sponomarev
Created November 24, 2017 16:20
Show Gist options
  • Save sponomarev/63ad0dd7bc022626e88fc6937b2d7d04 to your computer and use it in GitHub Desktop.
Save sponomarev/63ad0dd7bc022626e88fc6937b2d7d04 to your computer and use it in GitHub Desktop.
PG Lock monitor
CREATE VIEW lock_monitor AS
(SELECT COALESCE(blockingl.relation::regclass::text,blockingl.locktype) AS locked_item, now() - blockeda.query_start AS waiting_duration, blockeda.pid AS blocked_pid, blockeda.query AS blocked_query, blockedl.mode AS blocked_mode, blockinga.pid AS blocking_pid, blockinga.query AS blocking_query, blockingl.mode AS blocking_mode
FROM pg_catalog.pg_locks blockedl
JOIN pg_stat_activity blockeda ON blockedl.pid = blockeda.pid
JOIN pg_catalog.pg_locks blockingl ON( ((blockingl.transactionid=blockedl.transactionid)
OR (blockingl.relation=blockedl.relation
AND blockingl.locktype=blockedl.locktype) )
AND blockedl.pid != blockingl.pid)
JOIN pg_stat_activity blockinga ON blockingl.pid = blockinga.pid
AND blockinga.datid = blockeda.datid
WHERE NOT blockedl.granted
AND blockinga.datname = current_database() );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment