F.48. pgrowlocks â оÑобÑажение инÑоÑмаÑии о блокиÑовке ÑÑÑок ÑаблиÑÑ #
ÐодÑÐ»Ñ pgrowlocks пÑедоÑÑавлÑÐµÑ ÑÑнкÑиÑ, показÑваÑÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ блокиÑовке ÑÑÑок Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑаблиÑÑ.
Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÐµÐ³Ð¾ иÑполÑзование ÑазÑеÑено ÑÑпеÑполÑзоваÑелÑм, ÑолÑм Ñ Ð¿Ñавами Ñоли pg_stat_scan_tables и полÑзоваÑелÑм Ñ Ð¿Ñавом SELECT в заданной ÑаблиÑе.
F.48.1. ÐÐ±Ð·Ð¾Ñ #
pgrowlocks(text) returns setof record
РпаÑамеÑÑе пеÑедаÑÑÑÑ Ð¸Ð¼Ñ ÑаблиÑÑ. Ð ÑезÑлÑÑаÑе возвÑаÑаеÑÑÑ Ð½Ð°Ð±Ð¾Ñ Ð·Ð°Ð¿Ð¸Ñей, в коÑоÑом ÑÑÑока ÑооÑвеÑÑÑвÑÐµÑ ÑÑÑоке, заблокиÑованной в ÑаблиÑе. СÑолбÑÑ ÑезÑлÑÑаÑа Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе F.26.
ТаблиÑа F.26. СÑолбÑÑ ÑезÑлÑÑаÑа pgrowlocks
| ÐÐ¼Ñ | Тип | ÐпиÑание |
|---|---|---|
locked_row | tid | ÐденÑиÑикаÑÐ¾Ñ ÐºÐ¾ÑÑежа (TID) блокиÑованной ÑÑÑоки |
locker | xid | ÐденÑиÑикаÑÐ¾Ñ Ð±Ð»Ð¾ÐºÐ¸ÑÑÑÑей ÑÑанзакÑии или иденÑиÑикаÑÐ¾Ñ Ð¼ÑлÑÑиÑÑанзакÑии, еÑли ÑÑо мÑлÑÑиÑÑанзакÑÐ¸Ñ (Ñм. Раздел 71.1) |
multi | boolean | True, еÑли блокиÑÑÑÑий ÑÑбÑÐµÐºÑ â мÑлÑÑиÑÑанзакÑÐ¸Ñ |
xids | xid[] | ÐденÑиÑикаÑоÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÑÑÑÐ¸Ñ ÑÑанзакÑий (болÑÑе одной Ð´Ð»Ñ Ð¼ÑлÑÑиÑÑанзакÑии) |
modes | text[] | Режим блокиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (болÑÑе одного Ð´Ð»Ñ Ð¼ÑлÑÑиÑÑанзакÑии), маÑÑив Ñо знаÑениÑми Key Share, Share, For No Key Update, No Key Update, For Update, Update. |
pids | integer[] | ÐденÑиÑикаÑоÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÑÑÑÐ¸Ñ Ð¾Ð±ÑлÑживаÑÑÐ¸Ñ Ð¿ÑоÑеÑÑов (болÑÑе одного Ð´Ð»Ñ Ð¼ÑлÑÑиÑÑанзакÑии) |
ФÑнкÑÐ¸Ñ pgrowlocks запÑаÑÐ¸Ð²Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ AccessShareLock Ð´Ð»Ñ Ñелевой ÑаблиÑÑ Ð¸ ÑÑиÑÑÐ²Ð°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð·Ð° ÑÑÑокой Ð´Ð»Ñ ÑбоÑа инÑоÑмаÑии о блокиÑовке ÑÑÑок. ÐÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½ÐµÐ±ÑÑÑÑо Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑой ÑаблиÑÑ. ÐамеÑÑÑе, ÑÑо:
ÐÑли ÑаблиÑа заблокиÑована в Ñежиме
ACCESS EXCLUSIVE, ÑÑнкÑиÑpgrowlocksбÑÐ´ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑÑÑ.ФÑнкÑиÑ
pgrowlocksне гаÑанÑиÑÑÐµÑ Ð²Ð½ÑÑÑеннÑÑ ÑоглаÑованноÑÑÑ ÑезÑлÑÑаÑов. Ð Ñ Ð¾Ð´Ðµ ÐµÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð½Ð¾Ð²Ñе блокиÑовки ÑÑÑок, либо оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ñ ÑÑаÑÑе.
ФÑнкÑÐ¸Ñ pgrowlocks не показÑÐ²Ð°ÐµÑ ÑодеÑжимое заблокиÑованнÑÑ
ÑÑÑок. ÐÑли Ð²Ñ Ñ
оÑиÑе паÑаллелÑно взглÑнÑÑÑ Ð½Ð° ÑодеÑжимое ÑÑÑок, можно пÑоделаÑÑ Ð¿ÑимеÑно ÑледÑÑÑее:
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p
WHERE p.locked_row = a.ctid;Ðднако ÑÑÑиÑе, ÑÑо Ñакой запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑÐµÐ½Ñ Ð½ÐµÑÑÑекÑивнÑм.
F.48.2. ÐÑÐ¸Ð¼ÐµÑ Ð²Ñвода #
=# 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.48.3. ÐвÑÐ¾Ñ #
ТаÑÑо ÐÑии (Tatsuo Ishii)