Postgres EXPLAIN ANALYZE намного быстрее, чем обычный запрос
Я пытаюсь оптимизировать запрос PostgreSQL 8.4. После значительного упрощения исходного запроса, пытаясь выяснить, из-за чего он выбрал неправильный план запроса, я дошел до того, что выполнение запроса в EXPLAIN ANALYZE занимает всего 0,5 с, а выполнение обычно занимает 2,8 с. Тогда кажется очевидным, что EXPLAIN ANALYZE показывает мне не то, что обычно делает, поэтому все, что он мне показывает, бесполезно, не так ли? Что здесь происходит и как я вижу, что он на самом деле делает?
2 ответа
Скорее всего, страницы данных находятся в кеше диска ОС, когда вы вручную запускаете EXPLAIN ANALYZE, чтобы попытаться оптимизировать запрос. При запуске в обычной среде страницы, вероятно, еще не находятся в кэше и должны быть извлечены с диска, что увеличивает время выполнения.
Это показывает меньше времени, потому что:
1) Общее время выполнения показано EXPLAIN ANALYZE
включает время запуска и завершения работы исполнителя, а также время запуска любых запускаемых триггеров, но не включает время анализа, перезаписи или планирования.
2) Так как выходные строки не доставляются клиенту, затраты на передачу по сети и затраты на преобразование ввода / вывода не включены.
Предупреждение!
Издержки измерения, добавленные EXPLAIN ANALYZE, могут быть значительными, особенно на машинах с медленными вызовами операционной системы gettimeofday(). Итак, желательно использовать EXPLAIN (ANALYZE TRUE, TIMING FALSE)
,