Как мне прочитать Query Cost и всегда ли это процент?

34

В настоящее время я изучаю 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». , Я предполагаю, что они имеют в виду некоторые другие виды затрат, но я не могу найти ссылку на это в другом месте.

Может кто-нибудь помочь? Я полностью сбит с толку.


источник
PS Предполагая, что они имеют в виду нечто иное, чем проценты, показанные в планах выполнения ... как мне заставить SSMS показывать мне цифры, которые они цитируют? Нужно ли мне что-то вроде SET STATISTICS TIME ON, но с другой командой, которая покажет мне «стоимость» на вкладке «Сообщения»?

Ответы:

43

Стоимость запроса указывается в планах выполнения как «оценочная стоимость поддерева». Это абсолютный показатель, такой как 1.5. Конор Каннингем упомянул в презентации SQLBits, что первоначально он ссылался на количество секунд, затраченных на выполнение на компьютере конкретного сотрудника Microsoft ( «Машина Ника» ) в SQL Server за 7 дней.

введите описание изображения здесь

но теперь следует интерпретировать как безразмерную меру общих затрат.

План выполнения - это дерево. Каждому итератору в дереве присваивается приблизительная стоимость ЦП и предполагаемая стоимость ввода-вывода, и они суммируются, чтобы получить общую стоимость (относительные веса могут быть скорректированы с помощью пары недокументированных команд DBCC ). Ориентировочная стоимость поддерева включает стоимость самого итератора и всех его потомков. Чтобы увидеть пример используемых формул калькуляции, вы можете посмотреть эту статью .

Чтобы определить предполагаемую стоимость всего запроса в SSMS, выберите корневой итератор (например, SELECTитератор) слева от графического плана и посмотрите на этот показатель в окне свойств SSMS.

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

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

Мартин Смит
источник
Спасибо, это действительно полезно. И совсем не очевидно! Интересно, почему эта цифра не обозначена более четко?
4
Я всегда задавался вопросом об единице измерения, рад наконец узнать. Я объясняю это людям (смешно), что это «доллары SQL». Если стоимость запроса равна 1,0, это все равно, что заплатить 1 доллар за чашку кофе. Неплохая цена. Вы бы заплатили 300 долларов за чашку? Ни за что!
Датагод