PostgreSQL 锁等待排查
-- 查询当前锁等待信息
SELECT
pid,
mode,
granted,
query,
usename
FROM
pg_locks l
JOIN
pg_stat_activity a ON l.pid = a.pid
WHERE
NOT granted;
-- 查询锁等待的详细信息,包括锁定的对象
SELECT
a.usename,
a.pid,
a.query,
l.relation::regclass,
l.mode,
l.granted
FROM
pg_locks l
JOIN
pg_stat_activity a ON l.pid = a.pid
WHERE
NOT granted;
-- 查询锁等待的详细信息,包括锁定的行
SELECT
a.usename,
a.pid,
a.query,
c.relname,
l.mode,
l.granted,
l.locktype,
a.query
FROM
pg_locks l
JOIN
pg_class c ON l.relation = c.oid
JOIN
pg_stat_activity a ON l.pid = a.pid
WHERE
NOT granted;
这些SQL语句可以帮助你找出当前正在等待锁的进程,以及这些进程正在等待的锁的类型、模式、是否已授予等信息。通过这些信息,你可以进一步分析是哪些查询导致了锁等待,并可能采取措施如调整查询、优化表的索引、减少长事务的持有时间等来解决问题。
评论已关闭