Физические операторы в планах выполнения SQL Server: что такое повторная перемотка, перемотка и количество исполнений?

Я пытаюсь понять физические операторы в планах выполнения SQL Server. Эта страница весьма полезна:

http://technet.microsoft.com/en-us/library/ms191158.aspx

SSMS 2008 показывает некоторые физические свойства оператора, которые не отображаются в SSMS 2005: Estimated Number of Executions и Number of Executions. Но что они на самом деле означают, и как они связаны с повторной обработкой и перемоткой?

Estimated Number of Executions особенно интересен, поскольку он, похоже, не хранится в XML. Итак, как он рассчитывается? Кажется, он равен Estimated Rebinds + Estimated Rewinds + 1.0. Но если это так, то почему Number of Executions не равно Actual Rebinds + Actual Rewinds + 1?

Спасибо.

Ответ 1

В этом описании книга немного. Перемотка назад и повторная привязка применимы только в рамках цикла. Они относятся к использованию значений зонда из внешней части цикла во внутреннюю часть цикла и отражаются только в определенных операторах (это дорого стоит, поэтому стоит знать, как часто их набирают). Rebinds и Rewinds должны соотноситься непосредственно с числом исполнений, а не с числом + 1.

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

Ответ 2

Я рекомендую вам читать (и/или загружать) электронную книгу Планы выполнения SQL Server от Grant Fritchey. Загрузка кажется бесплатной.

Здесь раздел о переподготовках и перематывается. Я не эксперт в этом, поэтому я просто приведу нижнюю строку соответствующей главы:

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

Число заклинаний - это индикатор более высокого уровня для числа повторных операций и перемотки назад. Вот еще цитата:

Обратите внимание, что в отличие от текстовых планов, которые только что отображались в EstimateExecutions, XML-план предполагаемое количество повторений и перемотки назад. Это часто может дать вам более точное представление о том, что произошло в запросе, например, как много раз оператор был выполнен. (стр. 103)