Как работает «Стоимость запроса» в плане выполнения? - PullRequest
2 голосов
/ 18 августа 2011

Я пытаюсь увеличить производительность одного из моих запросов. Мой запрос состоит из 10 различных вариантов выбора.

Фактический производственный запрос выполняется за 36 секунд.

Если я отображаю план выполнения, для одного выбора стоимость запроса составляет 18%.

Таким образом, я изменяю предложение in (в этом выборе) с помощью запроса xml (http://www.codeproject.com/KB/database/InClauseAndSQLServer.aspx).

Новый запрос теперь выполняется 28 секунд, но сервер sql сообщает мне, что вышеупомянутый выбор имеет стоимость запроса 100%. И это единственное изменение, которое я сделал. И в любом запросе нет параллелизма.

ПРОДУКЦИЯ: 36 секунд, мой выбор составляет 18% (остальные 10%).

НОВАЯ ВЕРСИЯ: 28 секунд, мой выбор равен 100% (остальные - 0%).

Есть ли у вас какие-либо идеи, как sql server вычисляет эту "стоимость запроса"? (Я начинаю верить, что это случайно или что-то в этом роде).

1 Ответ

3 голосов
/ 18 августа 2011

Стоимость запроса - это единичная мера комбинации циклов ЦП, памяти и дискового ввода-вывода.

Очень часто вы увидите операторов или планы с более высокой стоимостью, но более быстрым временем выполнения.

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

Если вы хотите получить более подробную информацию о выполнении ваших конкретных запросов, вы можете использовать:

SET STATISTICS IO ON
SET STATISTICS TIME ON

Это выведет подробную информацию о циклах ЦП, создании плана и чтении страниц (как с диска, так и из памяти) на вкладку сообщений.

...