Чем полезен EXPLAIN ANALYZE QUERY для измерения производительности запросов?

Сегодня я экспериментировал с использованием объяснять анализ, чтобы извлечь время выполнения моих запросов. Я надеялся правильно вычислить время их выполнения без влияния задержек запросов, однако в документация утверждает, что вместо этого существуют накладные расходы на профилирование:

Чтобы измерить затраты времени выполнения каждого узла в плане выполнения, текущая реализация EXPLAIN ANALYZE добавляет накладные расходы на профилирование для выполнения запроса. В результате выполнение EXPLAIN ANALYZE для запроса иногда может занимать значительно больше времени, чем выполнение запроса в обычном режиме. Объем накладных расходов зависит от характера запроса, а также от используемой платформы. Наихудший случай имеет место для узлов плана, которые сами по себе требуют очень мало времени на выполнение, и на машинах, которые имеют относительно медленные вызовы операционной системы для получения времени суток.

В результате я сомневаюсь в полезности объяснить анализ, поскольку кажется, что вы просто торгуете задержкой с накладными расходами на профилирование. Что еще более удивительно, синхронизация моих запросов к базе данных в коде (Python в моем случае с библиотекой psycopg2) приводит к меньшему времени выполнения запросов.


person arauter    schedule 09.08.2018    source источник


Ответы (2)


EXPLAIN (ANALYZE) - это инструмент оптимизации, а не оптимизатор. Это означает, что он добавляет реальные накладные расходы и никогда не должен использоваться в производственном приложении, а только во время настройки.

Это ценный инструмент для разработчика или администратора базы данных, позволяющий точно понять, как ядро ​​базы данных будет выполнять конкретный запрос и на что тратится большая часть времени. Это может помочь, например, определить влияние добавления или удаления индекса с подробным воздействием на запросы как по времени, так и по доступам.

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

person Serge Ballesta    schedule 10.08.2018

EXPLAIN (ANALYZE) полезен не потому, что он измеряет точность времени выполнения, а потому, что он сообщает вам, где большая часть времени тратится, а где оценки PostgreSQL ошибочны.

person Laurenz Albe    schedule 10.08.2018