我目前正在使用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
我想知道的是表获取锁的时间有多长。有什么方法可以让我找回这些信息吗?
1条答案
按热度按时间gtlvzcf81#
PostgreSQL中没有锁定时间。
您能做的最好的事情是从
pg_stat_activity
中获取事务开始时间xact_start
,这是锁的年龄的下限。事务应该总是短的,因为长事务会持有锁并阻止autovacuum完成其工作。
如果您有任何长时间运行的事务,这可能是您必须解决的问题。那锁就不成问题了