pgrowlocks

Информация о блокировке строк для заданной таблицы.
Схема размещения: ext.
Модуль предоставляет функцию pgrowlocks(text), показывающую информацию о блокировке строк для заданной таблицы.
pgrowlocks(text) returns SETOF RECORD
В качестве параметра text передается имя таблицы.
Результат: набор записей, в котором строки соответствуют заблокированным в таблице строкам.
Столбцы результата pgrowlocks:
ИмяТипОписание
locked_row
tidИдентификатор кортежа (TID) блокированной строки
locker
xid– Идентификатор блокирующей транзакции;
– идентификатор мультитранзакции, если это мультитранзакция
multi
booleanПризнак мультитранзакции
xids
xid[]Идентификаторы блокирующих транзакций (больше одной для мультитранзакции)
modes
text[]Режим блокирования (больше одного для мультитранзакции), массив со значениями:
Key Share
Share
For No Key Update
No Key Update
For Update, Update
pids
integer[]Идентификаторы блокирующих обслуживающих процессов (больше одного для мультитранзакции)
Функция pgrowlocks запрашивает блокировку AccessShareLock для целевой таблицы и считывает строку за строкой для сбора информации о блокировке строк. Для большой таблицы это может занять значительное время.
Замечания:
  1. Если таблица заблокирована в режиме ACCESS EXCLUSIVE, функция pgrowlocks будет блокироваться.
  2. Функция pgrowlocks не гарантирует внутреннюю согласованность результатов. В ходе ее выполнения могут быть установлены новые блокировки строк либо освобождены старые.
Функция pgrowlocks не показывает содержимое заблокированных строк. Если необходимо параллельно взглянуть на содержимое строк, можно сделать следующее, но такой запрос не будет эффективным:
SELECT * FROM accounts AS a, pgrowlocks('accounts') AS p
  WHERE p.locked_row = a.ctid;

Использование модуля

Использование модуля по умолчанию разрешено суперпользователям, членам роли pg_stat_scan_tables и пользователям с правом SELECT в заданной таблице.
  • сессия № 1: SELECT * FROM message;
    Пример результата выполнения запроса:
    Раскрыть type=sql
     mid | sections |     name
    -----+----------+---------------
       1 | {3,4}    | Hi, World!
       2 | {1,4}    | Hello! World!
       3 | {1,2}    | Hi, my World!
       4 | {2,5}    | O, my World!
    (4 rows)
    
  • сессия № 2: BEGIN; UPDATE message SET name = 'Changed' WHERE mid=4;
  • сессия № 1: SELECT * FROM pgrowlocks('message');
    Пример результата выполнения запроса:
    Раскрыть type=sql
     locked_row | locker | multi |   xids   |       modes       |  pids
    ------------+--------+-------+----------+-------------------+--------
     (0,4)      | 105009 | f     | {105009} | {"No Key Update"} | {6071}
    (1 row)
    
    Просмотр блокировки с содержимым строк:
    SELECT * FROM message AS a, pgrowlocks('message') AS p
      WHERE p.locked_row = a.ctid;
    
    Пример результата выполнения запроса:
    Раскрыть type=sql
     mid | sections |     name     | locked_row | locker | multi |   xids   |       modes       |  pids
    -----+----------+--------------+------------+--------+-------+----------+-------------------+--------
       4 | {2,5}    | O, my World! | (0,4)      | 105009 | f     | {105009} | {"No Key Update"} | {6071}
    (1 row)
    
    Другой пример результата выполнения функции:
    SELECT * FROM pgrowlocks('t1');
    Пример результата выполнения запроса:
    Раскрыть type=sql
     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)
    

Ссылки на документацию разработчика

Дополнительную информацию по поставляемому модулю pgrowlocks можно получить по ссылке.
Предыдущий раздел
pg_repack
Следующий раздел
pgse_backup
Была ли страница полезной?