Задать вопрос
Alex_Geer
@Alex_Geer
System Engineer

Чем можно проанализировать дедлоки?

Недавно в базе начали появляться дедлоки. Но запросы очень большие и анализировать их по логам сложно. Какие есть инструменты для просмотра логов? Или есть инструмент, который сможет отобразить инфу по дедлокам: блокировки, временя и т. д?
  • Вопрос задан
  • 229 просмотров
Подписаться 3 Простой Комментировать
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега PostgreSQL
Седой и строгий
PgHero может помочь найти проблемные места, а дальше надо будет в режиме реального времени доставать запросами статистику.
Ответ написан
Комментировать
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Любой нормальный шаблон для Заббикса включает в себя метрики дедлоков, если вы про это.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Можно использовать системный каталог - pg_stat_activity в помощь.

Вот так, можно показать приложения (скорее сессии) и их запросы, которые заблокированы в транзакции:

select application_name
	, client_addr
	, state
	, query
from pg_stat_activity
where wait_event_type = 'Lock' and wait_event = 'transactionid';


Но строка запроса тут plain text (с подставленными значениями). Если есть расширение pg_stat_statements, то можно использовать query_id, чтобы нормализовать ее

select a.application_name
	, a.client_addr
	, a.state
	, s.query
from pg_stat_activity a
	join pg_stat_statements s on a.query_id = s.queryid
where wait_event_type = 'Lock' and wait_event = 'transactionid';


Дальше все просто - находишь кто эти запросы посылает (если сервисов несколько) и по строке определяешь в каком месте затык/дедлок

P.S. также есть pg_locks, но он больше про блокировки объектов БД
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы