Физические операторы в планах выполнения SQL Server: что такое повторное связывание, перемотка и количество выполнений? - PullRequest
12 голосов
/ 01 апреля 2010

Я пытаюсь понять физические операторы в планах выполнения 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?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 11 июня 2011

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

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

4 голосов
/ 14 января 2011

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

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

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

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

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

...