digital-garden/_inbox/Оптимизация SQL запросов.md

3.3 KiB
Raw Permalink Blame History

aliases tags date zero-link parents linked
зрелость/🌱
2024-06-17
00 Базы Данных
00 SQL

Что такое плохой или медленный запрос

  • Запрос по времени работает дольше остальных
  • Запрос, который потребляет больше ресурсов, чем остальные запросы
  • Быстро выполняемый запрос может быть также плохим, если выполняется часто и в сумме за N времени потребляет много ресурсов.

Алгоритм оптимизации запросов:

  • Проверить настройки. Возможно проблемы не связаны с запросами?
    • Слабое железо у сервера БД
    • Проблемы сети
    • Неправильные настройки БД
      • PostgreSQL
        • Много конекшенов, но ее используется PgBouncer.
        • Выключен или не настроен autovacuum
  • Отобрать запросы для оптимизации
    • ==Анализом необходимо заниматься только на продуктовой БД.==
    • Все подряд оптимизировать бесполезно. Нужно отобрать самые проблемные и начать с них.
  • Оптимизировать запросы
  • Повторить с новыми запросами из топа.

Где могут быть проблемы?

  • Передача запроса от клиента (сервиса). Пример при использовании IN
  • Сложный запрос, который долго парсится. Можно посмотреть в explain.
  • БД долго вычисляет план запроса и проводит оптимизации. Например, при использовании join.
  • Исполнение и возврат результатов. Если вы возвращаете несколько гигабайт, это не будет быстро.

Как улучшить?

Невозможно улучшить

  • count(*). Можно использовать приближенное значение из таблицы статистики.
  • join на 300 таблиц
  • Запрос возвращает клиенту 1 000 000 000 строк

Почему JOIN работает медленно?

Проблемы производительности IN