системное представление в PostgreSQL, отображающее текущие блокировки на уровне сервера: как уже выданные, так и ожидающие

С помощью pg_locks можно посмотреть какие транзакции держат блокировки, какие ждут, типы блокировок и анализировать причины ожиданий, дедлоков и длительных транзакций.

Колонки:

  • locktype (text) — тип блокируемого объекта. Возможные значения: relation (таблица, индекс, последовательность), page (страница данных внутри отношения), tuple (отдельная строка (кортеж)), transactionid (транзакция), virtualxid (виртуальный идентификатор транзакции), object (другие объекты БД (напр., типы данных)), userlock (пользовательские блокировки), и др.
  • database (oid) — OID базы данных, к которой относится блокировка (для глобальных объектов — 0)
  • relation (oid) — OID таблицы, индекса и т.п (если блокировка относится к отношению)
  • page (integer) — номер страницы внутри отношения (для блокировок уровня страницы)
  • tuple — позиция кортежа на странице (для блокировок строк)
  • virtualxid (text) — виртуальный идентификатор транзакции
  • transactionid (xid) — идентификатор транзакции, удерживающей или ожидающей блокировку
  • classid (oid) — OID системного каталога, если блокировка относится к объекту каталога
  • objid (oid) — OID конкретного объекта внутри каталога (например, OID типа данных)
  • objsubid (smallint) — номер столбца для блокировок отдельных столбцов (0 если блокировка всего объекта)
  • virtualtransaction (text) — идентификатор виртуальной транзакции связанной с блокировкой
  • pid (integer) — PID серверного процесса, удерживающего или ожидающего блокировку
  • mode (text) — режим блокировки, определяющий тип доступа. Возможные значения: AccessShareLock, RowShareLock, ShareRowExclusiveLock, ExclusiveLock, и т.п.
  • granted (boolean) — статус блокировки: true если блокировка уже выдана, false если она ожидается
  • fastpath (boolean) — признак был ли использован специальный механизм для обхода основной lock table для "лёгких" блокировок