Отображение действительного плана выполнения
В этой статье описывается создание фактических графических планов выполнения с помощью SQL Server Management Studio. Фактические планы выполнения создаются после выполнения запросов или пакетов T-SQL. Поэтому фактический план выполнения содержит сведения времени выполнения, такие как фактические метрики использования ресурса и предупреждения времени выполнения (если они есть). Созданный план выполнения отображает фактический план выполнения запросов, используемый ядром СУБД SQL Server для выполнения запросов.
Чтобы использовать эту функцию, пользователи должны иметь соответствующие разрешения для выполнения запросов Transact-SQL, для которых создается графический план выполнения, и им необходимо предоставить разрешение SHOWPLAN для всех баз данных, на которые ссылается запрос.
Чтобы получить фактический план выполнения для выделенных пулов SQL (ранее — хранилище данных SQL) и выделенных пулов SQL в Azure Synapse Analytics, существуют разные команды. Дополнительные сведения см. в статье «Мониторинг рабочей нагрузки выделенного пула SQL Azure Synapse Analytics с помощью динамических административных представлений».
Включение плана выполнения запроса во время выполнения
- На панели инструментов SQL Server Management Studio выберите «Запрос ядра СУБД». Вы также можете открыть существующий запрос и отобразить предполагаемый план выполнения, нажав кнопку «Открыть панель инструментов файла » и найдя существующий запрос.
- Введите запрос, для которого необходимо отобразить фактический план выполнения.
- В меню «Запрос» выберите «Включить фактический план выполнения» или нажмите кнопку «Включить фактический план выполнения».
- Выполните запрос, нажав кнопку «Выполнить панель инструментов». План, используемый оптимизатором запросов, отображается на вкладке План выполнения на панели результатов.

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

- Изменить внешний вид отображаемого плана выполнения можно, щелкнув его правой кнопкой мыши и выбрав пункты Увеличить масштаб, Уменьшить масштаб, Выборочное увеличениеили Масштаб по размеру. ПунктыУвеличить масштаб и Уменьшить масштаб позволяют увеличивать или уменьшать масштаб отображения плана выполнения, в то время как пункт Выборочное увеличение позволяет определять собственный масштаб, например 80 процентов от полного размера. При использовании пунктаМасштаб по размеру план выполнения масштабируется до размеров панели результатов. Также можно включить динамическое масштабирование, повернув колесико мыши с зажатой клавишей CTRL.
- Чтобы перейти к отображению плана выполнения, используйте вертикальные и горизонтальные полосы прокрутки или выберите и удерживайте на любой пустой области плана выполнения и перетащите мышь. Кроме того, выберите и удерживайте знак плюса (+) в правом нижнем углу окна плана выполнения, чтобы отобразить миниатюрную карту всего плана выполнения.
Также можно использовать SET STATISTICS XML для получения сведений о плане выполнения каждой инструкции после ее выполнения. Если используется в SQL Server Management Studio, вкладка «Результаты » будет иметь ссылку, чтобы открыть план выполнения в графическом формате.
Дополнительные сведения см. в разделе Инфраструктура профилирования запросов.
Далее
- Планы выполнения
- Руководство по архитектуре обработки запросов
- Отображение предполагаемого плана выполнения
SQL-Ex blog

Получение плана выполнения запроса в PostgreSQL
Добавил Sergey Moiseenko on Среда, 16 июня. 2021
Введение
Часто необходимо проверить производительность только что написанного запроса в PostgreSQL в поисках способа улучшить его производительность. Для этого вам нужно получить отчет о выполнении запроса, который называется планом выполнения. План выполнения запроса дает суммарную информацию о выполнении запроса с подробным отчетом о времени, потраченном на каждом шаге, и затратах на его выполнение.
Сгенерировать план выполнения запроса позволяет ключевое слово EXPLAIN в PostgreSQL. Синтаксис создания плана в PostgreSQL имеет вид:
EXPLAIN [ ( OPTION [, . ] ) ] YOUR_SQL_QUERY;
Для этой команды OPTION имеется много вариантов. Множественный выбор осуществляется перечислением через запятую. Вот эти варианты:
ANALYZE [ boolean ]
VERBOSE [ boolean ]
COSTS [ boolean ]
BUFFERS [ boolean ]
TIMING [ boolean ]
SUMMARY [ boolean ]
FORMAT
Значение Boolean может быть TRUE или FALSE. Вместо TRUE можно использовать ON или 1. Аналогично для FALSE используются OFF или 0.
Очень простой план выполнения запроса выглядит так:

Объяснение синтаксиса
Прежде чем использовать EXPLAIN для генерации плана выполнения запроса, необходимо узнать об особенностях синтаксиса.
ANALYZE
Когда вы используете ключевое слово EXPLAIN, сначала выполняется ваш запрос PostgreSQL. После успешного выполнения запроса возвращается вся статистика времени выполнения, включая полное время на каждый узел плана и общее число строк, прочитанных запросом. Ключевое слово ANALYZE будет фактически выполнять запрос в реальном времени для сбора и подготовки плана выполнения. Поэтому, если вы выполняете следующий запрос:

то строки на самом деле вставляются в таблицу:

VERBOSE
Это ключевое слово покажет дополнительную информацию, связанную с планом выполнения запроса. Эта опция по умолчанию имеет значение FALSE. Чтобы установить её в TRUE, можно написать:

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

BUFFERS
BUFFERS является одним из наиболее интересных ключевых слов для проверки в плане выполнения запроса. Она в основном состоит из 2 частей — разделяемых чтений (shared read) и разделяемых обращений (shared hit). Разделяемые чтения — это число блоков, которые PostgreSQL читает с диска. Разделяемые обращения — это число блоков, которые PostgreSQL читает из кэша. PostgreSQL поддерживает свой собственный кэш. Это вид памяти для запросов, которые выполнялись ранее. Всякий раз, когда вы выполняете запрос, PostgreSQL сначала смотрит в свой кэш и, если необходимо, читает данные с диска.
Это ключевое слово имеет зависимость от ключевого слова ANALYZE, и может использоваться только вместе с ним. Значением по умолчанию является FALSE. Вы можете использовать его в плане выполнения своего запроса таки образом:

Замечание. Так как мы ранее выполняли этот запрос многократно (обсуждая другие ключевые слова), буферы показывают только разделяемые обращения, т.к. результаты находились в кэше. Если выполнить запрос с новым предложением WHERE, появятся также и разделяемые чтения.
TIMING
TIMING детализирует время запуска и время выполнения на каждом узле. Значением по умолчанию является TRUE. Для его использования должно применяться ключевое слово ANALYZE. Если вы попытаетесь использовать ключевое слово TIMING без ANALYZE, то получите следующую ошибку:

План выполнения с включенным TIMING будет выглядеть так:

План выполнения с выключенным TIMING имеет вид:

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

FORMAT
Это ключевое слово представляет большой интерес, если вам требуется подготовить отчет о производительности запроса или сохранить детали плана выполнения запроса для последующих ссылок. Вам потребуется указать формат для представления результата. TEXT — это значение по умолчанию. Другими вариантами являются XML, JSON и YAML. Для генерации вывода в JSON можно написать так:

Примеры
Мы уже представили много примеров выше. При этом использовался очень простой запрос. Давайте воспользуемся более близкими к реальным запросами, как те, которые используют предложение WHERE или JOIN.
Предположим, что нам нужно посмотреть план выполнения для запроса, который выводит информацию о студенте с номером 5. План выглядит так:

Выясним, нужны ли вам VERBOSE и BUFFERS в плане выполнения. Если необходимо проверить выходные столбцы, вы можете использовать VERBOSE. Если требуется проверить, сколько блоков было прочитано с диска, а сколько из кэша, можно использовать BUFFERS.
Теперь предположим, что нам требуется соединить 2 таблицы (например, student [содержащую номер и оценки] и home [содержащую номер, город проживания и штат]) и вернуть информацию пользователю. Тогда план выполнения будет такой:

Заключение
С помощью ключевого слова EXPLAIN вы можете многое сделать для определения стоимости и эффективности своих запросов. Оно помогает найти места, где потребуется тонкая настройка запросов. В результате это поможет вам также идентифицировать запросы, которые будут потреблять значительное количество времени на рабочем сервере. Это поможет вам выявить такие запросы заранее и обезопасить сервер от проблем зависания на ранней стадии.
Обратные ссылки
Нет обратных ссылок
Комментарии
Показывать комментарии Как список | Древовидной структурой
Автор не разрешил комментировать эту запись
Анализ фактического плана выполнения
В этом разделе описывается, как анализировать фактические графические планы выполнения с помощью функции анализа планов SQL Server Management Studio. Эта функция доступна начиная с SQL Server Management Studio версии 17.4. Обычно мы рекомендуем установить последнюю версию SSMS.
Фактические планы выполнения создаются после выполнения запросов Или пакетов Transact-SQL. Поэтому фактический план выполнения содержит сведения о времени выполнения, такие как фактическое число строк, фактические метрики использования ресурса и предупреждения времени выполнения (если они есть). Дополнительные сведения см. в статье Отображение фактического плана выполнения.
Чтобы действительно находить и устранять основные причины возникновения проблем с производительностью запросов, требуется значительный опыт в области понимания планов выполнения и принципов обработки запросов.
СРЕДА SQL Server Management Studio включает функции, реализующие некоторую степень автоматизации в задаче анализа фактических планов выполнения, особенно для больших и сложных планов. Целью является упрощение поиска сценариев неточной оценки кратности и получение рекомендаций, содержащих возможные варианты исправлений.
Сначала необходимо должным образом проверить предложенные способы, и только после этого реализовывать их в рабочих средах.
Анализ плана выполнения для запроса
- Откройте ранее сохраненный файл плана выполнения запроса (.sqlplan) с помощью меню «Файл » и щелкните «Открыть файл» или перетащите файл плана в окно Management Studio. Кроме того, если вы только что выполнили запрос и выбрали показать его план выполнения, перейдите на вкладку План выполнения на панели результатов.
- Щелкните правой кнопкой мыши в пустой области плана выполнения и выберите пункт Анализировать фактический план выполнения.

- В нижней части откроется окно Анализ Showplan. Вкладка Несколько операторов полезна при анализе планов с несколькими операторами, поскольку позволяет анализировать правильную пару операторов.
- Перейдите на вкладку «Сценарии» для просмотра сведений о проблемах, обнаруженных для фактического плана выполнения. Для каждого оператора, указанного на левой панели, на правой панели отображаются сведения о сценарии по ссылке Щелкните здесь, чтобы ближе познакомиться с этим сценарием., а также возможные причины, объясняющие этот сценарий.

Как посмотреть план выполнения запроса в Microsoft SQL Server
Всем привет! Сегодня мы поговорим о том, как посмотреть план выполнения запроса в Microsoft SQL Server, при этом мы рассмотрим несколько способов.

Введение
План выполнения запроса – это набор конкретных действий, выполнение которых приведет SQL запрос к итоговому результату.
Иными словами, план выполнения запроса – это то, как именно будет выполняться пользовательский запрос, т.е. как именно будет осуществляться доступ к исходным данных, в каком порядке, какие конкретные методы будут использоваться для извлечения данных из каждой таблицы, какие конкретные методы будут использованы для вычислений, фильтрации, статистической обработки и сортировки данных.
Более подробно план выполнения запроса мы рассматривали в материале
Сегодня мы с Вами поговорим о том, как посмотреть план запроса и начать его анализировать. Однако сначала обязательно стоит отметить, что существует несколько типов планов запроса.
Типы планов выполнения запроса
Оптимизатор запросов Microsoft SQL Server формирует только один план выполнения для запроса, однако существует несколько типов планов выполнения запроса, которые можно отобразить с помощью SQL Server Management Studio (SSMS).
Предполагаемый план выполнения
Предполагаемый план выполнения (Estimated Execution Plan) – это план, созданный оптимизатором запросов на основе оценок.
При создании предполагаемого плана выполнения сам запрос и в целом пакеты языка Transact-SQL не выполняются, поэтому такой план не содержит фактических метрик использования ресурсов.
Вместо этого предполагаемый план отображает наиболее вероятный план выполнения запроса, которому следовал бы SQL Server при фактическом выполнении запроса, а также этот план отображает расчетное движение строк при выполнении нескольких операторов в плане.
За счет того, что запрос фактически не выполняется, это не создает никакой серьезной задержки перед отображением предполагаемого плана выполнения запроса.
Такой план удобно использовать в тех случаях, когда запрос выполняется долго, а нам необходимо посмотреть план, который собирается использовать SQL Server для данного запроса.
Действительный план выполнения
Действительный план выполнения (Actual Execution Plan) – это план, созданный оптимизатором запросов после фактического выполнения запроса. Иными словами, план становится доступным после выполнения SQL инструкции. Поэтому такой план отображает фактические метрики использования ресурсов.
Примечание! Для того, чтобы иметь возможность просматривать план выполнения запроса пользователи должны обладать соответствующими разрешениями на запуск SQL запроса, для которого создается графический план выполнения. Кроме того, пользователям должно быть предоставлено разрешение SHOWPLAN для всех баз данных, упоминаемых в запросе.
Статистика активных запросов
Статистика активных запросов (Live Query Statistics) – это план, который создаётся в режиме реального времени. Такой план доступен во время выполнения SQL запроса и обновляется каждую секунду, что позволяет нам просматривать динамический план выполнения активного запроса.
Такая возможность позволяет нам анализировать процесс выполнения запроса в режиме реального времени по мере передачи управления от одного оператора плана запроса другому.
Динамический план запроса отображает общий ход выполнения запроса и текущую статистику выполнения на уровне оператора, например, число полученных строк, затраченное время, ход выполнения оператора и т. д. Так как эти данные доступны в режиме реального времени, чтобы их увидеть, не нужно дожидаться завершения запроса, такая статистика бывает полезна для отладки проблем с производительностью запросов. Статистика активных запросов доступна с версии SQL Server 2016.
Примечание! Эта функция предназначена в основном для диагностики. Ее использование может значительно снизить общую производительность запроса.
Как посмотреть план выполнения запроса
Посмотреть план выполнения запроса можно, конечно же, с помощью SQL Server Management Studio. При этом для каждого типа используется свой способ просмотра.
Отображение предполагаемого плана выполнения запроса
Посмотреть предполагаемый план выполнения запроса можно несколькими способами, в частности:
- С помощью интерфейса SQL Server Management Studio
- С помощью инструкции языка Transact-SQL
С помощью интерфейса SSMS
В окне создания запроса на панели инструментов нажмите кнопку «Показать предполагаемый план выполнения» (Display Estimated Execution Plan).

В результате откроется вкладка «План выполнения». Сам запрос, как Вы помните, в данный момент выполняться не будет.

С помощью инструкции Transact-SQL
Тот же самый план выполнения можно получить с помощью следующей инструкции языка T-SQL
SET SHOWPLAN_XML ON;
В результате, когда Вы будете запускать запрос на выполнение, вместо результирующего набора данных Вам будет возвращен XML документ, и если на него щелкнуть, т.е. открыть, то план выполнения запроса будет отображен графически, также как с помощью иконки на панели инструментов.

Чтобы выключить отображение плана необходимо установить данному параметру значение OFF.
SET SHOWPLAN_XML OFF;
Отображение действительного плана выполнения запроса
Фактический план выполнения запроса можно также посмотреть нескольким способами:
- С помощью интерфейса SQL Server Management Studio
- С помощью инструкции языка Transact-SQL
С помощью интерфейса SSMS
В окне создания запроса на панели инструментов нажмите кнопку «Включить действительный план выполнения» (Include Actual Execution Plan).

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

С помощью инструкции Transact-SQL
Тот же самый план выполнения можно получить с помощью следующей инструкции языка T-SQL
SET STATISTICS XML ON;
В результате, после выполнения запроса у Вас отобразится дополнительное окно с планом запроса формате XML. Если кликнуть на этот документ, то план выполнения запроса будет отображен графически.

Чтобы выключить отображение плана, необходимо установить данному параметру значение OFF.
SET STATISTICS XML OFF;
Просмотр динамической статистики запросов
В окне создания запроса на панели инструментов нажмите кнопку «Включить статистику активных запросов» (Include Live Query Statistics).

В итоге в момент выполнения запроса откроется вкладка «Статистика активных запросов», на которой в режиме реального времени можно будет наблюдать ход выполнения запроса в формате плана запроса.

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
На сегодня это все, надеюсь, материал был Вам полезен, пока!
