TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3097 2.28K
День 2576. #МоиИнструменты #PostgresTips
Инструменты Оптимизации Запросов в PostgreSQL. Часть 1

Каждый инженер сталкивался с ситуацией, когда запрос, который должен выполняться за секунды, выполняется 20 минут. Панель мониторинга выдает ошибку тайм-аута. И вы застреваете, глядя на SQL-запрос, гадая, что пошло не так. Проблема не всегда очевидна. Без правильных инструментов оптимизация — это гадание. Эти инструменты помогут обеспечить кратное повышение производительности запросов. Также они показывают, почему запросы выполняются медленно и как именно это исправить.

Замечание: анализ инструментов основан на обширном тестировании в Snowflake, BigQuery, Postgres и Redshift по состоянию на февраль 2025 года. Улучшения производительности — это реальные измерения на производственных нагрузках, а не синтетические бенчмарки.

1. pgBadger (PostgreSQL Query Analyzer)
Что даёт: понимание, что на самом деле происходит в Postgres, не утопая в логах.

Зачем нужен:
Логи запросов PostgreSQL полны, но нечитаемы. Тысячи строк показывают время выполнения, планы и ошибки — но нет чёткого представления о том, что именно снижает производительность.
pgBadger преобразует чистые логи PostgreSQL в полезные HTML-отчеты, показывающие:
- Самые медленные запросы (с фактическим временем выполнения);
- Наиболее часто выполняемые запросы (цели оптимизации с высоким уровнем влияния);
- Запросы, вызывающие ошибки;
- Анализ ожидания блокировок;
- Использование временных файлов;
- Паттерны соединений.

До pgBadger (чистые логи):
2025-02-07 14:23:11 UTC [12345]: LOG:  duration: 45231.234 ms  statement: SELECT...
2025-02-07 14:23:56 UTC [12346]: LOG: duration: 123.456 ms statement: SELECT...

И так 50 тысяч строк. Не понятно, какие запросы важны.

С pgBadger (создание отчёта из логов):
pgbadger /var/log/postgresql/postgresql-*.log -o report.html

Создаёт красивый HTML-отчет, показывающий:
- 10 самых медленных запросов;
- Варианты быстрых решений.

Когда использовать
- Использование PostgreSQL в продакшене;
- Проблемы с производительностью, но неясно, в каких запросах;
- Необходим ретроспективный анализ паттернов запросов;
- Желание показать значимость оптимизации.

Когда отказаться
- Не производственная среда (есть альтернативы);
- Отладка отдельных запросов (используйте EXPLAIN);
- Необходим мониторинг в реальном времени (pgBadger - это пакетный анализ).

Скрытая функция
Инкрементальная генерация отчетов вместо обработки всего лога:
pgbadger --last-parsed /var/log/last_parsed.log \
/var/log/postgresql/postgresql-*.log \
-o incremental-report.html

- Анализирует только новые записи лога;
- В 100 раз быстрее для ежедневных отчётов;
- Идеальна для автоматического мониторинга.

Недостаток
Использование памяти pgBadger’ом возрастает с ростом размера лога.
Для больших логов (>10Гб) используйте сэмплинг:
# Анализируем 10% логов
pgbadger --sample 10 large_logfile.log

# Делим на временные отрезки
pgbadger --begin "2025-02-07 00:00:00" \
--end "2025-02-07 23:59:59" \
postgresql.log


Источник: https://medium.com/@reliabledataengineering/15-sql-optimization-tools-that-make-queries-10x-faster-8629ac451d97
  • 👍 11
More from @netdeveloperdiary
  1. Sep 28, 2026День 2798. #Оффтоп Утиная Типизация в C# с Помощью Перехватчиков. Часть 2 Некоторое время…
  2. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  3. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  4. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  5. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  6. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →