pgrowlocks

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页

# F.28. pgrowlocks

`pgrowlocks`模块提供一个显示指定的表的行锁定信息的函数。

## F.28.1. 概述

    pgrowlocks(text) returns setof record

该参数是一个表的名字。结果是一组记录，一行代表表中的一个锁定的行。 输出字段在表 F-19中显示。

表 F-19. `pgrowlocks` 输出字段

名字 | 类型 | 描述
--- | --- | ---
`locked_row` | `tid` | 锁定的行的元组 ID (TID)
`locker` | `xid` | 锁定的事务 ID，或如果是多事务则为 multixact ID
`multi` | `boolean` | 如果锁定的是多事务则为真
`xids` | `xid[]` | 锁定的事务 ID(如果有多个事务则为多个)
`lock_type` | `text[]` | 锁定的锁模式 (如果有多个事务则为多个)， 一些 `Key Share`， `Share`， `For No Key Update`， `No Key Update`， `For Update`， `Update`。
`pids` | `integer[]` | 锁定后端的过程 ID (如果有多个事务则为多个)

`pgrowlocks`将`AccessShareLock`作为目标表， 并且一行一行的读取行以采集行锁的信息。这对于大表来说不是非常快。请注意；

1. 如果表作为一个整体是被他人排他锁的，那么`pgrowlocks`将被阻塞。

2. `pgrowlocks`不保证生成一个自我一致的快照。 在执行期间，获得一个新的行锁或释放一个旧锁都是可能的。

`pgrowlocks`并不显示锁定的行的内容。 如果你希望同一时间查看行的内容，你可以像下面这样做：

    SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p
      WHERE p.locked_row = a.ctid;

不论如何都要小心这样一个查询将会是非常低效率的。

## F.28.2. 示例输出

    test=# SELECT * FROM pgrowlocks('t1');
     locked_row | lock_type | locker | multi |   xids    |     pids
    ------------+-----------+--------+-------+-----------+---------------
          (0,1) | Shared    |     19 | t     | {804,805} | {29066,29068}
          (0,2) | Shared    |     19 | t     | {804,805} | {29066,29068}
          (0,3) | Exclusive |    804 | f     | {804}     | {29066}
          (0,4) | Exclusive |    804 | f     | {804}     | {29066}
    (4 rows)

## F.28.3. 作者

Tatsuo Ishii

上一页 | 起始页 | 下一页
pg_prewarm | 上一级 | pg_stat_statements