Last active
August 29, 2019 15:36
-
-
Save zhuomingliang/011c2c6134b68a647101ef212c4f0f9f to your computer and use it in GitHub Desktop.
PostgreSQL DBA get locks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
with t_wait as | |
(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid, | |
a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a, | |
transactionid,b.query,b.xact_start,b.query_start,b.usename,b.datname | |
from pg_locks a,pg_stat_activity b where a.pid=b.pid and not a.granted), | |
t_run as | |
(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple, | |
a.classid,a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid, | |
a,transactionid,b.query,b.xact_start,b.query_start, | |
b.usename,b.datname from pg_locks a,pg_stat_activity b where | |
a.pid=b.pid and a.granted) | |
select r.locktype,r.mode r_mode,r.usename r_user,r.datname r_db, | |
r.relation::regclass,r.pid r_pid, | |
r.page r_page,r.tuple r_tuple,r.xact_start r_xact_start, | |
r.query_start r_query_start, | |
now()-r.query_start r_locktime,r.query r_query,w.mode w_mode, | |
w.pid w_pid,w.page w_page, | |
w.tuple w_tuple,w.xact_start w_xact_start,w.query_start w_query_start, | |
now()-w.query_start w_locktime,w.query w_query | |
from t_wait w,t_run r where | |
r.locktype is not distinct from w.locktype and | |
r.database is not distinct from w.database and | |
r.relation is not distinct from w.relation and | |
r.page is not distinct from w.page and | |
r.tuple is not distinct from w.tuple and | |
r.classid is not distinct from w.classid and | |
r.objid is not distinct from w.objid and | |
r.objsubid is not distinct from w.objsubid and | |
r.transactionid is not distinct from w.transactionid and | |
r.pid <> w.pid | |
order by | |
(( case w.mode | |
when 'INVALID' then 0 | |
when 'AccessShareLock' then 1 | |
when 'RowShareLock' then 2 | |
when 'RowExclusiveLock' then 3 | |
when 'ShareUpdateExclusiveLock' then 4 | |
when 'ShareLock' then 5 | |
when 'ShareRowExclusiveLock' then 6 | |
when 'ExclusiveLock' then 7 | |
when 'AccessExclusiveLock' then 8 | |
else 0 | |
end ) + | |
( case r.mode | |
when 'INVALID' then 0 | |
when 'AccessShareLock' then 1 | |
when 'RowShareLock' then 2 | |
when 'RowExclusiveLock' then 3 | |
when 'ShareUpdateExclusiveLock' then 4 | |
when 'ShareLock' then 5 | |
when 'ShareRowExclusiveLock' then 6 | |
when 'ExclusiveLock' then 7 | |
when 'AccessExclusiveLock' then 8 | |
else 0 | |
end )) desc,r.xact_start; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment