更新时间:2025-07-10 GMT+08:00
分享

PG_LOCKWAIT_DETAIL

PG_LOCKWAIT_DETAIL视图显示当前实例中锁等待链详细信息。如果存在多级的锁等待关系,会依次将整个锁等待链按照等待顺序显示出来。

该视图8.2.1集群版本中8.2.1.251及以上版本支持;9.1.1.100及以上集群版本支持。

表1 PG_LOCKWAIT_DETAIL字段

名称

类型

描述

level

integer

锁等待链中的层级,以1开始,每显示一层等待关系level会加1。

node_name

name

节点名称,对应pgxc_node表中的node_name列。

lock_wait_hierarchy

text

锁等待链,以节点名称:进程号->等待进程号->等待进程号->...。

lock_type

text

被锁定对象的类型。

database

oid

被锁定对象所在数据库的OID。

relation

oid

被锁定对象关系的OID。

page

integer

关系内部的页面编号。

tuple

smallint

页面的行编号。

virtual_xid

text

事务的虚拟ID。

transaction_id

xid

事务ID。

class_id

oid

包含该对象的系统表的OID。

obj_id

oid

对象在其系统表内的OID。

obj_subid

smallint

对于表的列字段编号。

virtual_transaction

text

持有此锁或者在等待此锁的事务的虚拟ID。

pid

bigint

持有此锁或者等待此锁的线程号。

mode

text

锁级别。

granted

boolean

是否持有锁。

fastpath

boolean

是否通过fastpath机制获得锁。

wait_for_pid

bigint

锁冲突线程的线程号。

conflict_mode

text

锁冲突线程持有的冲突锁级别。

query_id

bigint

查询语句的ID。

query

text

查询语句。

application_name

text

连接到该后端的应用名。

backend_start

timestamp with time zone

后端进程启动时间,即客户端连接服务器的时间。

xact_start

timestamp with time zone

当前事务的启动时间。

query_start

timestamp with time zone

开始当前活跃查询的时间。

state

text

后端当前总体状态。

waittime

timestamp with time zone

开始等待锁的时间戳。

holdtime

timestamp with time zone

开始获取锁的时间戳。

应用示例

  1. 连接DN节点,开启一个事务,执行查询。

    1
    2
    BEGIN;
    SELECT * FROM t1;
    

  2. 另一个窗口连接CN,对表t1执行TRUNCATE。

    1
    TRUNCATE t1;
    

    此时TRUNCATE会被阻塞。

  3. 另开一个窗口连接DN,查询PG_LOCKWAIT_DETAIL视图,获得当前的锁等待情况,帮助诊断阻塞原因。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    SELECT * FROM PG_LOCKWAIT_DETAIL;
     level | node_name |             lock_wait_hierarchy              | lock_type | database | relation | page | tuple | virtual_xid | transaction_id | class_id | obj_id | obj_subid | virtual_transaction |       pid       |        mode         | granted | fastpath |  wait_for_pid   |  conflict_mode  |     query_id      |          query          | application_n
    ame |         backend_start         |          xact_start           |          query_start          | state  |           waittime           |           holdtime            
    -------+-----------+----------------------------------------------+-----------+----------+----------+------+-------+-------------+----------------+----------+--------+-----------+---------------------+-----------------+---------------------+---------+----------+-----------------+-----------------+-------------------+-------------------------+--------------
    ----+-------------------------------+-------------------------------+-------------------------------+--------+------------------------------+-------------------------------
         1 | datanode1 | datanode1:140371308516512                    | relation  |    16564 |    25224 |      |       |             |        3956258 |          |        |           | 15/204              | 140371308516512 | AccessExclusiveLock | f       | f        | 140371308446552 | AccessShareLock | 77687093572143017 | TRUNCATE t1             | coordinator1 
        | 2025-02-13 15:07:35.168383+08 | 2025-02-13 15:11:23.613945+08 | 2025-02-13 15:11:23.651944+08 | active | 2025-02-13 15:11:23.65369+08 | 
         2 | datanode1 | datanode1:140371308516512 -> 140371308446552 | relation  |    16564 |    25224 |      |       |             |                |          |        |           | 13/18               | 140371308446552 | AccessShareLock     | t       | f        |                 |                 |                 0 | begin;select * from t1; | gsql         
        | 2025-02-13 14:15:58.989993+08 | 2025-02-13 15:10:40.594882+08 | 2025-02-13 15:10:40.594882+08 | active |                              | 2025-02-13 15:10:40.596243+08
    (2 rows)
    

相关文档