Как посмотреть блокировки в PostgreSQL | PGLens.

Как посмотреть блокировки в PostgreSQL

Текущие блокировки видны в системном представлении pg_locks, а сведения о сессиях – в pg_stat_activity. Практическую пользу дает соединение этих представлений: оно показывает, какой запрос ждет и кто его блокирует. Важно учитывать, что данные отражают только текущий момент – после снятия блокировки записи исчезают.

Текст запросов в pg_stat_activity виден только для собственных сессий роли. Полная картина по всему кластеру доступна суперпользователю или роли с членством в pg_read_all_stats.

Запросы для поиска блокировок

  • Определите ожидающие сессии и их блокировщиков:
  • SELECT pid, wait_event_type, wait_event, state, query,
    pg_blocking_pids(pid) AS blocked_by
    FROM pg_stat_activity
    WHERE cardinality(pg_blocking_pids(pid)) > 0;
  • Посмотрите детали по конкретному объекту и режиму блокировки:
  • SELECT locktype, relation::regclass, mode, granted, pid
    FROM pg_locks
    WHERE NOT granted;
  • Если сессия удерживает блокировку и мешает работе, ее можно завершить:
  • SELECT pg_terminate_backend(12345);

Бесплатный 7‑дневный аудит PostgreSQL с PGLens

PGLens остается у вас для полноценного тестирования еще до 90 дней БЕСПЛАТНО

    Напишите нам
    Удобнее с телефона?
    Сканируйте QR