【发布时间】:2021-12-04 01:23:36
【问题描述】:
在一个小表(700 行)上的一个非常简单的删除(按键)时不时地保持“事务空闲”几分钟(通常需要几毫秒),即使所有锁都标记为“已授予”。
我能做些什么来查明是什么原因造成的? 我正在使用这个选择:
SELECT a.datname,
c.relname,
l.transactionid,
l.mode,
l.GRANTED,
a.usename,
a.waiting,
a.query,
a.query_start,
age(now(), a.query_start) AS "age",
a.pid
FROM pg_stat_activity a
JOIN pg_locks l ON l.pid = a.pid
JOIN pg_class c ON c.oid = l.relation
ORDER BY a.query_start;
它显示了很多“RowExclusiveLock”,但都被授予了......所以我看不出是什么导致了这种延迟高峰。
【问题讨论】:
-
idle in transaction 表示您没有运行
commit/rollback/end或通过事务共享连接到池 -
事务由 Spring @Transaction 处理,正常工作正常,但时不时保持这种状态几分钟
标签: sql postgresql locking