F.28. pgrowlocks

pgrowlocks模块提供了用于显示指定表的行锁定信息的功能。

默认情况下,使用仅限于超级用户,pg_stat_scan_tables角色的成员以及对表具有SELECT权限的用户。

F.28.1. Overview

pgrowlocks(text) returns setof record

该参数是表的名称。结果是一组记录,表中的每个锁定行都有一行。输出列显示在Table F.20中。

表 F.20.pgrowlocks输出列

Name Type Description
locked_row tid 锁定行的 TuplesID(TID)
locker xid 储物柜的 TransactionID,如果是多 Transaction,则为多重 ID
multi boolean 如果储物柜为多重 Transaction,则为 True
xids xid[] 储物柜的 TransactionID(如果是多笔 Transaction,则为多个)
modes text[] 储物柜的锁定模式(如果是多笔 Transaction,则为多个),即Key ShareShareFor No Key UpdateNo Key UpdateFor UpdateUpdate的数组。
pids integer[] 锁定后端的进程 ID(如果是多事务,则为多个)

pgrowlocksAccessShareLock作为目标表,并逐行读取每一行以收集行锁定信息。对于一张大桌子来说,这不是很快。注意:

pgrowlocks不显示锁定行的内容。如果要同时查看行内容,可以执行以下操作:

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

但是请注意,这样的查询效率很低。

F.28.2. samples 输出

=# SELECT * FROM pgrowlocks('t1');
 locked_row | locker | multi | xids  |     modes      |  pids
------------+--------+-------+-------+----------------+--------
 (0,1)      |    609 | f     | {609} | {"For Share"}  | {3161}
 (0,2)      |    609 | f     | {609} | {"For Share"}  | {3161}
 (0,3)      |    607 | f     | {607} | {"For Update"} | {3107}
 (0,4)      |    607 | f     | {607} | {"For Update"} | {3107}
(4 rows)

F.28.3. Author

Tatsuo Ishii

上一章 首页 下一章