план запроса. Но как я понял из прочитанного на postgrespro, то explain analyze выполняет запрос для того, чтобы отдать план запроса. Я не понимаю вот что, если запрос будет ресурсоёмкий, то не повредит ли текущей производительности сервера (как я понимаю это делается прям на бою)? Или нет такого запроса, выполнив который, сервер ощутимо напряжётся? Может кто-нибудь вкратце пояснить как это обычно применяется?
Кажется там есть два варианта этой команды, с и без выполнения
EXPLAIN - покажет просто, как планировщик оценивает прохождение узлов. EXPLAIN ANALYZE - запрос выполнится на самом деле и пройдет все узлы. Так же показывает доп статистику.
Да, понимаю. Мне вот интересно analyze реально выполняет запрос. А такая работа может как-то ощутимо нагрузить сервер (особенно если анализируются несколько запросов)?
https://postgrespro.ru/docs/postgresql/9.6/sql-explain С параметром ANALYZE оператор будет выполнен на самом деле, а не только запланирован. При этом в вывод добавляются фактические сведения о времени выполнения, включая общее время, затраченное на каждый узел плана (в миллисекундах) и общее число строк, выданных в результате. Это помогает понять, насколько близки к реальности предварительные оценки планировщика.
Да, талантливый запрос выполнится и может нормально нагрузить систему.
А чего тогда спрашиваешь?
я спрашиваю именно про analyze. Denis как раз ответил на мой вопрос
Может конечно. Про несколько запросов - не понятно, поскольку explain не может несколько запросов обрабатывать
Спасибо. Я почему спрашиваю. Начал тестером-нагрузчиком работать и мне сказали почитать на тему планов запроса в постгресе. И вот я думаю, когда мне нужно будет анализировать план запроса, то наверняка придётся использовать analyze. И если это можно будет делать только на бою, то это ведь может быть чревато? Хотя наверное будет использоваться какой-нибудь тестовый стен
ага, а если один запрос посмотрели, а потом на очереди ещё несколько нужно будет, значит по очереди запускать... как я понимаю
Повредит. Но если нужны реальные результаты — то деваться некуда.
. И вот я думаю, когда мне нужно будет анализировать план запроса, то наверняка придётся использовать analyze. Нет, вовсе не обязательно И если это можно будет делать только на бою, то это ведь может быть чревато? Может Хотя наверное будет использоваться какой-нибудь тестовый стен Можно и так
> то наверняка придётся использовать analyze Да, придётся. Без ANALYZE (и дополнительных опций уже для него) анализировать планы обычно практически бесполезно (разве что нет другого выхода, например когда запрос "зависает", т.е. выполнялся бы несколько часов/дней). > то это ведь может быть чревато? Может, а что поделаешь... но для примерного / предварительного анализа лучше работать на тестовом кластере баз, да. > Хотя наверное будет использоваться какой-нибудь тестовый стен Дело в том, что при использовании исключительно тестового стенда есть риск "оптимизировать" запрос именно под него, а в реальности всё будет наоборот ("на бою" от этих изменений станет только хуже).
Очень + последний абзац
Обсуждают сегодня