我目前正在使用Postgres作为应用程序的数据库引擎。
我目前有一种情况,我有很多READ锁(AccessSharedLocks)存在。我运行以下查询来检查锁:
SELECT t.schemaname,
t.relname,
l.locktype,
l.page,
l.virtualtransaction,
l.pid,
l.mode,
l.granted
FROM pg_locks l
JOIN pg_stat_all_tables t ON l.relation = t.relid
WHERE t.schemaname <> 'pg_toast'::name AND t.schemaname <> 'pg_catalog'::name
我想知道的是桌子获得了多长时间的锁定。有什么方法可以检索这些信息吗?
先感谢您。
在PostgreSQL中没有锁定的时间。
您可以做的最好的事情是从xact_start
获取交易开始时间pg_stat_activity
,这是锁定年龄的下限。
事务应该总是很短,因为它们持有锁定的长事务并保持autovacuum不能完成其工作。
如果您有任何长时间运行的事务,那可能是您必须解决的问题。然后锁将不会是这样的问题。