当前位置: 首页 > 知识库问答 >
问题:

POSTGRES:找出一个锁被获取的时间

宰父俊彦
2023-03-14

我目前正在使用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个答案

陈开宇
2023-03-14

锁定的时间在PostgreSQL中不可用。

最好的方法是从< code>pg_stat_activity中取出事务开始时间< code>xact_start,这是锁寿命的下限。

事务应该总是很短,因为长事务它们持有锁并阻止自动真空完成其工作。

如果您有任何长时间运行的事务,这可能是您必须解决的问题。那么锁就不是问题了。

 类似资料:
  • 当试图在一个已经存在的数据库中创建新节点时,我会遇到以下异常: 用于存储数据库实例的助手类

  • 问题内容: 我有一个简单的表,像这样: 我想获得每个用户出现的前2个“字母”, 甚至更好:崩溃成列 我怎样才能在postgres中做到这一点? 问题答案: = > SQL小提琴演示

  • 问题似乎在这个文件中:https://github.com/brianc/node-postgres/blob/master/lib/types/textparsers.js 如果从Postgres返回的日期字符串没有指定时区(例如或),那么它只会构造一个JavaScript日期对象,我相信它只会包括本地时区。

  • 表以作为主键,列(CHAR(1))可以是“x”或“y”,以及(INT)。这些列上没有索引。存储引擎是InnoDB。 state_positions必须总是连续的,并且对于某个状态可能永远不会有重复的位置,即如果我有5个状态为“x”的用户,他们的state_positions必须是1、2、3、4、5 这是我正在运行的导致死锁的查询: 为了测试,我同时插入了大量的用户,但每次都出现死锁错误。 我读了这

  • 我的本地系统中安装了 Python (3.8.3) 和 Oracle DB(11g Release 2 服务器)。这两个软件都单独工作正常。我可以在python中运行程序,并且我可以使用Oracle DB中的数据创建表,我可以通过Oracle SQL Developer访问这些数据 1. 本地初始化方法 - connection = cx_Oracle.connect(“oe/oracle@loc

  • 问题内容: 我在项目中使用了hibernate模式,并且由于非常简单的数据库操作而获得了随机的表观死锁。 有一个堆栈跟踪:https : //gist.github.com/knyttl/8999006 –让我感到困惑的是,第一个异常是RollbackException,然后是LockAquisition异常。 问题经常发生在类似的条款上: 我很困惑,因为我不知道这是Hibernate,MySQL