В настоящее время я изучаю SQL 70-433 (сертификационный экзамен Microsoft), и меня очень смущает показатель производительности "стоимость запроса".
Согласно любой документации, которую я мог найти через Google, стоимость запроса представляет собой процент в процентах и представляет процент от всей партии, занятой какой-либо одной его частью. Это уже показалось мне немного странным, так как меня интересует абсолютная ценность конкретного запроса, а не его ценность по сравнению с другими запросами, которые появляются рядом с ним.
Но потом я подумал, ну, может быть, то, что вы ожидаете сделать, - это разместить два альтернативных запроса рядом, запустить их как «пакет», и тогда тот из них, у которого стоимость меньше 50%, становится победителем.
Но обсуждение стоимости запроса в главе 6, первый урок Microsoft 70-433 Training Kit, похоже, не имеет к этому никакого отношения.
Вот пример: они показывают запрос, содержащий два коррелированных подзапроса, а затем улучшают его, заменяя подзапросы OUTER APPLY. Результат: «Стоимость этого запроса составляет около 76, а стоимость первого запроса была в два раза больше, около 151.» Затем они еще больше улучшают запрос и снижают стоимость с 76 до 3,6. Они не подразумевают, что эти цифры являются процентами, тогда как они подразумевают, что они являются абсолютными цифрами, которые относятся к запросу как к отдельному объекту, без ссылки на какие-либо другие запросы. И вообще, как первый запрос может стоить 151%?
Позже в этой главе они показывают скриншот плана выполнения, который состоит из трех частей. Первый говорит: «Стоимость: 0%», второй - «Стоимость: 1%», а последний - «Стоимость: 99%», но текст (самой книги) ниже снимка экрана «Стоимость этого запроса составляет 0,56». , Я предполагаю, что они имеют в виду некоторые другие виды затрат, но я не могу найти ссылку на это в другом месте.
Может кто-нибудь помочь? Я полностью сбит с толку.
Ответы:
Стоимость запроса указывается в планах выполнения как «оценочная стоимость поддерева». Это абсолютный показатель, такой как
1.5
. Конор Каннингем упомянул в презентации SQLBits, что первоначально он ссылался на количество секунд, затраченных на выполнение на компьютере конкретного сотрудника Microsoft ( «Машина Ника» ) в SQL Server за 7 дней.но теперь следует интерпретировать как безразмерную меру общих затрат.
План выполнения - это дерево. Каждому итератору в дереве присваивается приблизительная стоимость ЦП и предполагаемая стоимость ввода-вывода, и они суммируются, чтобы получить общую стоимость (относительные веса могут быть скорректированы с помощью пары недокументированных команд DBCC ). Ориентировочная стоимость поддерева включает стоимость самого итератора и всех его потомков. Чтобы увидеть пример используемых формул калькуляции, вы можете посмотреть эту статью .
Чтобы определить предполагаемую стоимость всего запроса в SSMS, выберите корневой итератор (например,
SELECT
итератор) слева от графического плана и посмотрите на этот показатель в окне свойств SSMS.При выполнении нескольких запросов (будь то в одном пакете или нет) процент вычисляется путем сложения всех этих значений и расчета процента, как и следовало ожидать.
Вы должны знать, что даже в фактических планах выполнения этот показатель затрат основан на оценках, и использование его для сравнения относительных достоинств двух разных запросов может быть крайне ошибочным в случаях, когда оценки являются неточными.
источник