Задать вопрос

Как определить причины низкой производительности postgres?

прошу помочь разобраться с причиной низкой производительности бд, большого количества sharelock .
У нас высоко-нагруженная система с кол-вом активных пользователей около 5000.
И в часы пиковых нагрузок резко возрастает sharelock - обычно до 12k , сегодня до 21k и падает производительность системы. По мере снижения кол-ва пользователей - ситуация нормализуется. При кол-ве sharelock до 4k система работает стабильно.
Пытались воздействовать изменением параметра max_connections изначально было 500 , увеличивали до 700 с шагом 100, но изменений практически нет.

Вот график sharelocks
67a086fe65b04947413439.png
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
DBA Team для вашего PostgreSQL?
Вы смотрите на совершенно бесполезный график. Смотрите на полезные.

Если у вас табличка с 10 индексами и к ней select * from foo where id = ? - то это минимум 11 AccessShareLock. Совершенно логично, что чем больше параллельно нагрузки - тем больше вы увидите AccessShareLock. И дальше куда с этим? Вот и получается совершенно бесполезный график. А задирание max_connections сделает только хуже.

Посмотрите график CPU, есть ли в принципе CPU свободный (помним что у вас наверняка есть HT, значит 100% утилизации недостижимы, реальный потолок окажется где-то в районе 70-90%)
Посмотрите графики латентности IO. Если проседает латентность чтения или записи под нагрузкой - то это будет причина замедления. СУБД очень чувствительны к латентности.
Дальше графики pg_stat_activity с разбивкой по state. Если растут idle in transaction - проверять как дела на приложении, а так же сеть.
Конечно, графики по pg_stat_statements. top5 запросов по времени выполнения, для начала.
И проверить наличие корреляции с графиком длительности самой старой транзакции.
Ответ написан
Ваш ответ на вопрос

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

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