F.29. pgrowlocks
最编程
2024-08-05 10:03:13
...
F.29.1. 概述
pgrowlocks(text) 返回 setof record
参数是一个表的名称。结果是一个记录集合,其中每一行对应表中一个被锁定的行。输出列如表 F.21所示。
表 F.21. pgrowlocks
输出列
名称 | 类型 | 描述 |
---|---|---|
locked_row
|
tid
|
被锁定行的元组 ID(TID) |
locker
|
xid
|
持锁者的事务 ID,如果是多事务则为多事务 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
并且一个一个读取每一行来收集行的锁定信息。这对于一个大表不是很快。注意:
-
如果表被其他人整体加上了排他锁,
pgrowlocks
将被阻塞。 -
pgrowlocks
不保证能产生一个自我一致的快照。在它执行期间,有可能加上一个新行锁,也有可能有旧行锁被释放。
pgrowlocks
不显示被锁定行的内容。如果你想同时查看行内容,你可以这样做:
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p WHERE p.locked_row = a.ctid;
不过要注意,这样一个查询将非常低效。
上一篇: InnoDB的独占锁定机制
下一篇: 深入理解InnoDB引擎中的意向锁机制
推荐阅读