Using EXPLAIN/ru

From PostgreSQL wiki
Jump to navigationJump to search


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

Выполнить ее можно двумя способами:

  • EXPLAIN ANALYZE фактически выполнит запрос, что позволит сравнить ожидаемый план запроса с непосредственно выполненным. Внимание! Если запрос манипулирует данными, то выполнение с EXPLAIN ANALYZE также приведет к изменениям.
  • EXPLAIN выведет ожидаемый план выполнения без обращения к данным.

Существуют инструменты, упрощающие анализ вывода EXPLAIN:

Ниже приведены ссылки на материалы:

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

Если вы не можете самостоятельно разобраться с планом, обратитесь к рассылке pgsql-performance, предоставив полный вывод EXPLAIN ANALYZE, схему и проблемные запросы. Чтобы получить ответы стоящие и быстро, прочтите вопросы по медленным запросам перед тем, как задать вопрос. Также, если вы используете версию PostgreSQL отличную от текущей стабильной, вполне возможно, что эта проблема уже решена в последней. Обновление в рамках мажорной версии потенциально может сэкономить ваше время. Например, обновитесь с версии 8.2.3 до 8.2.6 и посмотрите повторно на план выполнения. Помогло?

Продвинутой техникой является периодическое сохранение планов по мере роста объема данных таблиц и проведение их сравнительного анализа. Это может натолкнуть на мысль об изменении агрессивности сбора статистики, например. Простой пример на pl/pgsql приведен в обсуждении Общие возможности Explain.