Моніторинг продуктивності БД: pg_stat_statements та slow query log

Уявіть: ваш інтернет-магазин навантажує базу, кожні 5 хвилин сторінки завантажуються по 10 секунд, а в пік продажів сайт лягає. Ви перевіряєте сервер — CPU вільний, пам'яті запас, а запити все одно повільні. Без моніторингу продуктивності БД ви шукаєте проблему наосліп. Ми налаштовуємо `pg_stat_stat

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Моніторинг продуктивності БД: pg_stat_statements та slow query log
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Уявіть: ваш інтернет-магазин навантажує базу, кожні 5 хвилин сторінки завантажуються по 10 секунд, а в пік продажів сайт лягає. Ви перевіряєте сервер — CPU вільний, пам'яті запас, а запити все одно повільні. Без моніторингу продуктивності БД ви шукаєте проблему наосліп. Ми налаштовуємо pg_stat_statements та slow query log, підключаємо Prometheus із Grafana — і ви бачите точні метрики: cache hit rate, лаг реплікації, найважчі запити. За 2 дні ви отримуєте дашборди, які в реальному часі показують, які запити гальмують систему. Це не разова перевірка — це постійний контроль.

Ми вже стикалися з ситуацією, коли один повільний JOIN через неправильний індекс з'їдав 40% часу бази. Після налаштування моніторингу клієнт знайшов і виправив проблему за годину. Економія на операційних витратах сягає 30% за рахунок зниження простоїв. Оцінимо ваш проект безкоштовно — напишіть нам.

Як pg_stat_statements допомагає виявити повільні запити?

Розширення pg_stat_statements накопичує статистику по кожному унікальному запиту: час виконання, кількість викликів, стандартне відхилення. Конфігурація мінімальна:

shared_preload_libraries = 'pg_stat_statements' pg_stat_statements.max = 10000 pg_stat_statements.track = all pg_stat_statements.track_utility = off 

Після перезапуску створіть розширення та виконайте запит для пошуку проблем:

-- Топ за сумарним часом SELECT left(query, 120) AS query, calls, round(total_exec_time::numeric / 1000, 1) AS total_sec, round(mean_exec_time::numeric, 1) AS avg_ms, round(stddev_exec_time::numeric, 1) AS stddev_ms, round(rows::numeric / nullif(calls, 0), 0) AS rows_per_call FROM pg_stat_statements WHERE dbid = (SELECT oid FROM pg_database WHERE datname = current_database()) AND calls > 10 ORDER BY total_exec_time DESC LIMIT 20; -- Запити з великим розкидом часу SELECT left(query, 120) AS query, calls, round(mean_exec_time::numeric, 1) AS avg_ms, round(stddev_exec_time::numeric, 1) AS stddev_ms, round(stddev_exec_time / nullif(mean_exec_time, 0) * 100, 1) AS cv_pct FROM pg_stat_statements WHERE calls > 100 ORDER BY cv_pct DESC LIMIT 10; 

На одному проекті ми виявили запит, який виконувався в середньому 2,3 секунди і займав 15% від загального часу БД. Після додавання індексу час впав до 15 мс — прискорення в 153 рази. pg_stat_statements documentation підтверджує, що це найшвидший спосіб отримати агреговану картину. У порівнянні з slow query log:

Інструмент Що дає Швидкість аналізу Глибина деталізації
pg_stat_statements Зведення по всіх запитах Секунди Висока (агрегати)
slow query log Кожен повільний запит із планом Хвилини Повна

Разом вони в 3 рази швидше допомагають локалізувати вузьке місце, ніж ручний перегляд логів.

Приклад: як ми знайшли повільний JOIN

У production-системі клієнта join двох таблиць на 2 млн рядків виконувався 4.5 секунди через відсутність індексу по зовнішньому ключу. pg_stat_statements показав TTFB на запиті 4.2 сек, а slow query log вивів повний план. Додали індекс — час впав до 12 мс. Без моніторингу пошук зайняв би кілька днів.

Чому slow query log важливий для MySQL?

У MySQL вмикаємо slow query log з порогом 1 секунда та логуванням запитів без індексів:

slow_query_log = ON slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1 log_queries_not_using_indexes = ON min_examined_row_limit = 1000 log_slow_rate_limit = 100 

Типовий випадок: запит без індексу сканував 500 000 рядків, виконуючись 4,2 секунди. Після аналізу ми додали складений індекс, і час скоротився до 0,03 секунди — зниження на 99,3%. Аналізуємо через Percona Toolkit:

pt-query-digest --since="1h ago" --limit 20 --output report /var/log/mysql/slow.log 

Це дає count, avg/max time та rows examined для кожного унікального запиту.

Метричний моніторинг: Prometheus + Grafana

Для PostgreSQL використовуємо postgres_exporter, для MySQL — mysqld_exporter. Конфігурація експортерів стандартна, налаштовується за годину. Ключові метрики та алерти:

Метрика Поріг алерту
Cache hit rate (PG) < 99%
Активні з'єднання > 80% від max_connections
Лаг реплікації > 30 секунд
Slow queries count/min зростаючий тренд

Приклад правил алертингу:

groups: - name: postgresql rules: - alert: PostgreSQLSlowQueries expr: rate(pg_stat_statements_total_exec_time_seconds_total[5m]) > 10 for: 2m - alert: PostgreSQLHighConnections expr: pg_stat_activity_count > pg_settings_max_connections * 0.8 

Ви можете імпортувати готові дашборди Grafana (ID 9628 для PostgreSQL, 7362 для MySQL).

Що входить у роботу з налаштування моніторингу БД?

Ми надаємо повний комплект документації: опис конфігурації доступів, інструкції з розгортання, керівництво з дій при спрацьовуванні алертів. Після впровадження ви отримуєте:

  • Налаштовані експортери для PostgreSQL та MySQL.
  • Дашборди Grafana з ключовими метриками (cache hit rate, лаг реплікації, топ запитів).
  • Кастомні алерти з відправкою в Telegram або Slack.
  • Навчання команди: як інтерпретувати метрики та реагувати на алерти.
  • Щоденні звіти pgBadger по повільних запитах.

Це дозволяє вашій команді самостійно підтримувати продуктивність БД без зовнішньої допомоги. Вартість впровадження окупається за 2 місяці за рахунок скорочення простоїв. Отримайте консультацію — ми оцінимо ваш проект за 1 годину.

Які етапи включає налаштування моніторингу БД?

  1. Аналітика: збір поточних метрик, виявлення вузьких місць за логами та статистикою.
  2. Налаштування pg_stat_statements та slow_query_log з оптимальними параметрами.
  3. Деплой Prometheus експортерів (postgres_exporter, mysqld_exporter).
  4. Створення кастомних дашбордів Grafana з ключовими метриками cache hit rate, лагу реплікації, топ запитів.
  5. Налаштування алертів в Alertmanager з відправкою в Telegram/Slack.
  6. Інтеграція pgBadger для щоденних звітів та навчання команди.
  7. Документація з конфігурації та дій при спрацьовуванні алертів.

Які типові помилки допускають при налаштуванні моніторингу БД?

  • Не вмикають pg_stat_statements.track_utility = off — засмічують статистику службовими запитами.
  • Забувають налаштувати log_line_prefix для MySQL — втрачають контекст у slow log.
  • Використовують один дашборд для всіх баз — ігнорують специфіку реплікації та шардингу.
  • Не встановлюють поріг alertmanager на burst — отримують спам при короткочасних сплесках.

Ми виправляємо ці помилки на етапі впровадження. Наші інженери мають 5+ років досвіду в адмініструванні PostgreSQL та MySQL, сертифіковані по Prometheus. Більше 10 проектів з оптимізації продуктивності БД гарантують результат. Після впровадження моніторингу клієнти економлять до 40% часу на діагностику та скорочують простої вдвічі. Замовте налаштування моніторингу БД — і ми виявимо вузькі місця за 2 дні.