Published on

February 3, 2017

Понимание планов выполнения SQL Server

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

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

Что такое план выполнения?

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

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

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

Типы планов выполнения

Помимо графических планов выполнения, существуют также текстовые и XML-планы выполнения. Текстовые планы сложно читать и будут устаревать в будущих версиях SQL Server. XML-планы выполнения могут быть сохранены и открыты в виде графических планов, что обеспечивает большую гибкость.

Предполагаемые и фактические планы

Существуют два типа планов выполнения: предполагаемые и фактические. Предполагаемый план рассчитывается оптимизатором запросов перед выполнением и представляет собой предполагаемый оптимальный план с наименьшей стоимостью. Он может быть быстро возвращен пользователю. Фактический план, с другой стороны, показывает фактические шаги, выполненные для обработки запроса, и возвращается после завершения запроса.

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

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

Какой план лучше?

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

Обновление статистики или проверка последней даты обновления статистики может улучшить производительность запроса. Таблицу sys.indexes можно запросить, чтобы получить последнюю дату обновления статистики.

Вывод

Понимание и анализ планов выполнения является ценным навыком для администраторов баз данных и разработчиков SQL Server. Изучая предполагаемые и фактические планы, вы можете оптимизировать производительность медленно выполняющихся запросов. Графические планы выполнения предоставляют подробный обзор операций и их последовательности, что делает их отличным инструментом для анализа.

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.