5 вещей, которые вам нужно знать при чтении планов выполнения в SQL Server

Пересказ статьи Bert Wagner. 5 Things You Need To Know When Reading SQL Server Execution Plans

Ссылки на статьи этой серии:

  1. Введение в планы выполнения SQL Server.
  2. Планы выполнения: статистика.
  3. Эта статья.
  4. Операторы плана выполнения в SQL Server.
  5. Как я использую планы выполнения SQL Server для решения проблем.

Порядок плана выполнения

План выполнения показывает шаги, которые предпринимает SQL Server для выполнения вашего запроса. Каждая иконка в графическом плане выполнения называется оператором, и традиционный способ чтения плана начинается с крайнего справа верхнего оператора и далее по стрелкам влево.

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

Двигаясь по стрелкам от одного оператора к другому, вы следуете за потоками данных в плане. Каждый оператор передает строку данных оператору, находящемуся непосредственно слева от него, пока все строки данных не завершат свой путь в крайнем слева операторе.

Стрелки

Стрелки показывают направление потока данных между операторами.


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

При анализе планов эти относительные размеры стрелок подскажут вам, где можно увидеть в планах больше данных, чем вы ожидали.

Свойства операторов

При наведении курсора на оператор (или стрелку) вы получите дополнительную информацию о том, что этот оператор делает. Эта информация включает не только описание оператора, но также показывает число строк, которые SQL Server ожидал прочитать на этом шаге в сравнении с фактически прочитанным значением (при использовании фактического плана выполнения), какие предикаты применялись, предупреждающие сообщения и многое другое.


Развернув окно свойств (по умолчанию F4) выбранного оператора, вы получите еще больше информации. Я обычно в этих свойствах обращаю внимание на использование памяти и процессора и на то, какие преобразования SQL Server делает при выполнении этой части моего запроса.

Стоимость


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

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

Предупреждения


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

Обычные виновники этих предупреждений — это операторы, сбрасывающие данные в tempdb, неявные преобразования, которые SQL Server должен производить для выполнения сравнения (что потенциально препятствует использованию индекса), и SQL Server сообщает вам, что он превысил/недооценил количество памяти, которое необходимо использовать для выполнения вашего запроса.

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

Рекомендации по индексам


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

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

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

Добавить комментарий