Найти блокировки PG

Если вы столкнулись с тем, что линейно, или не дай бог экспоненциально растер нагрузка на PostgreSQL, вероятно есть lock в базе.
Получаем активный запрос такой командой:
SELECT pid, client_addr, usename, datname, state, to_char(current_timestamp - state_change, ‘SSSS.MS’) AS runtime, query FROM  pg_stat_activity WHERE pid <> pg_backend_pid()  AND state = ‘active’  AND state_change < current_timestamp - INTERVAL ‘3’ SECOND ORDER BY  runtime DESC;
Получив pid запроса, можно его убить:
select * from pg_terminate_backend(PID);
Если процесс появился вновь, значит его блокирует что-то выше, тогда:
Клоним репу:
https://github.com/dataegret/pg-utils
переходим в нее и выполняем:
psql -f sql/locktree.sql
Это позволит нам увидеть древовидную структуру блокировок. И тем самым найти причину.
Без рубрики

Related Articles

0 Comment