pgrowlocks
模組提供了一個函式,用於顯示指定表的行鎖定資訊。
預設情況下,使用許可權受限於超級使用者、擁有pg_stat_scan_tables
角色的使用者以及對錶擁有SELECT
許可權的使用者。
pgrowlocks(text) returns setof record
引數是表的名稱。結果是一組記錄,對於表中每個被鎖定的行,都有一行輸出。輸出列顯示在表 F.21中。
表 F.21. pgrowlocks
輸出列
名稱 | 型別 | 描述 |
---|---|---|
locked_row |
tid |
被鎖定行的元組 ID(TID) |
locker |
xid |
鎖定者的事務 ID,如果是多事務則為 multixact ID;參見第 67.1 節 |
multi |
boolean |
如果鎖定者是多事務,則為 True |
xids |
xid[] |
鎖定者的事務 ID(如果是多事務,則可能不止一個) |
modes |
text[] |
鎖定者的鎖模式(如果是多事務,則可能不止一個),是For Key Share 、For Share 、For No Key Update 、No Key Update 、For Update 、Update 的陣列。 |
pids |
integer[] |
鎖定後端的程序 ID(如果是多事務,則可能不止一個) |
pgrowlocks
對目標表獲取 AccessShareLock
並逐行讀取以收集行鎖定資訊。對於大表來說,這效率不高。請注意:
如果對錶獲取了 ACCESS EXCLUSIVE
鎖,pgrowlocks
將會被阻塞。
pgrowlocks
不保證產生一致的快照。在執行過程中,可能會有新的行被鎖定,或者舊的鎖被釋放。
pgrowlocks
不顯示被鎖定行的內容。如果你想同時檢視行內容,可以這樣做:
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p WHERE p.locked_row = a.ctid;
但請注意,這樣的查詢效率會非常低。
=# 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)
Tatsuo Ishii
如果您在文件中發現任何不正確、與您對特定功能的實際體驗不符或需要進一步澄清的內容,請使用此表格報告文件問題。