Описать проблему ↗

Скорость

PostgreSQL: медленный запрос каталога на PHP-сайте

Каталог PHP-сайта медленно читает данные из PostgreSQL. Разберём, как подтвердить причину и какие измерения нужны для полезной оптимизации.

Редакция «починимсайт» · Обновлено · 3 мин. чтения

Что происходит и с чего начать

Долгий ответ страницы не обязательно означает один плохо написанный запрос. Приложение может делать их слишком много, ждать блокировку или получать большой ненужный набор данных. Поэтому сначала связывают конкретную страницу с работой базы. Для этого полезны адрес, фильтры, сортировка и время проверки. PostgreSQL предлагает инструменты анализа, но запускать тяжёлые диагностические команды на рабочей базе без оценки не нужно. Исследование должно учитывать текущую нагрузку и особенности запроса, особенно если он изменяет данные.

Что можно проверить самостоятельно

  1. Сохраните точную ссылку с параметрами и несколько сопоставимых замеров. Укажите, зависит ли задержка от числа товаров, фильтра и времени фонового обновления каталога.
  2. Сравните простой вариант страницы и проблемный, меняя одно условие. Это помогает найти конкретную выборку, а не исследовать все обращения к базе одновременно.
  3. Попросите показать связь найденного запроса с задержкой пользователя. Для обсуждения достаточно безопасной структуры запроса и измерений, без публикации личных данных и полного содержимого таблиц.

Как понять результаты проверки

План выполнения показывает, как база предполагает получать результат. Реальные измерения помогают проверить, совпадает ли ожидание с фактической работой. Инструменты анализа выбирают осознанно: вариант с выполнением действительно запускает запрос и может быть дорогим. Помимо индексов проверяют актуальность статистики, объём результата и повторные обращения приложения. Оптимизация должна сохранять условия отбора и нужный порядок. Если результат стал быстрее только потому, что перестал учитывать часть фильтров, задача пользователя не решена.

Что проверяет разработчик

Для этой части понадобятся доступ к настройкам, журналам ошибок или коду. Её можно передать специалисту вместе с результатами предыдущих шагов.

  1. Найдите запрос по журналу или доступной статистике. Сохраните безопасный пример параметров, при которых каталог тормозит.
  2. Изучите план на копии данных и сравните ожидаемое число строк с фактическим, если выполняете измерение. EXPLAIN ANALYZE действительно исполняет запрос.
  3. Проверьте блокировки, актуальность статистики и работу обслуживания таблиц. Замедление после массового импорта может отличаться от постоянной проблемы схемы.

На что обратить внимание

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

Как исправляют причину

Исправьте запрос и подходящий индекс после измерения. Обновление статистики и обслуживание выполняйте с учётом размера таблиц и нагрузки. Не запускайте исполняющий анализ изменяющих данные запросов на рабочей базе без контролируемого плана.

Как убедиться, что проблема решена

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

После изменения повторите исходные фильтры и соседние варианты, проверьте количество, порядок и состав товаров. Сравните общую скорость страницы, а не только один внутренний запрос. Если меняли индексы, оцените влияние на обычную запись и обмен. Итоговые замеры должны быть получены на сопоставимых данных; пустая тестовая база не подтверждает улучшение рабочего каталога с большим ассортиментом.