Skip to main content

Мониторинг и анализ

Неплохой мониторинг из коробки может предоставить заббикс: https://www.zabbix.com/integrations/postgresql

Много каких-то умных графиков, в которых я нихрена не понимаю

jinx-the-cat.gif

https://sematext.com/blog/postgresql-performance-tuning/


Как вообще работает постгря?

Важно партиционирование и индексы. Надо нарезать большие таблицы на более мелкие (партиционировать их) и создавать индексы для столбцов, которые чаще всего используются. Но не стоит переусердствовать с индексами.

Куда смотреть на мониторинге? Как мониторить? Что мониторить?

Понятное дело, надо мониторить саму железку. Сеть, проц, озу, нагрузку на диски.

КСоветую накстроить мониторинг тем же заббиксом, таму из коробки мониторится много полезных параметров.

Мониторим запростгрю?ы

Можно накостылять такой скриптец и поместить его в крон:


#!/bin/bash

result=$(sudo -u postgres psql  -c "select query_start, state, query from pg_stat_activity where (state = 'idle in transaction') and xact_start is not null and (now() - pg_stat_activity.query_start) > interval '1 minutes';")

echo $result | grep '0 rows' && exit

echo ok

echo $result >> /root/log

Лучше будет включить логгирование медленных запросов (src)


log_min_duration_statement = 1000 # миллисекунды
logging_collector = on
log_directory = 'pg_log'

Обязателен перезапуск базы, pg_reload_conf() не поможет. На лету можно только длительность запроса менять. Если нельзя перезапускать, то придется жить с костылем.

Посмотрим еще размер таблиц:

 

SELECT 
  table_name, 
  pg_size_pretty( pg_total_relation_size(quote_ident(table_name))), 
  pg_total_relation_size(quote_ident(table_name))
FROM 
  information_schema.tables
WHERE 
  table_schema = 'public' and table_catalog = 'URDATABASE'
ORDER BY 
  pg_total_relation_size(quote_ident(table_name)) DESC;

 

Смотрим параметры

  • Cache Hit Rate

Будет прекрасно, если hit rate будет около 99%. Смотреть вот так

SELECT 
  sum(heap_blks_read) as heap_read,
  sum(heap_blks_hit)  as heap_hit,
  sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as ratio
FROM 
  pg_statio_user_tables;

 

  • Index Usage