SET SHOWPLAN_XML (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics (только выделенный пул SQL)

Приводит к тому, что SQL Server не выполняет инструкции Transact-SQL. Вместо этого SQL Server возвращает подробные сведения о планируемом способе выполнения инструкций в виде строго определенного XML-документа.

Соглашения о синтаксисе Transact-SQL

Синтаксис

SET SHOWPLAN_XML { ON | OFF }

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Замечания

Значение SET SHOWPLAN_XML устанавливается во время запуска или выполнения, а не во время синтаксического анализа.

Если для параметра SET SHOWPLAN_XML установлено значение ON, то SQL Server возвращает подробные сведения о планируемом способе выполнения каждой инструкции, не выполняя их, и инструкции Transact-SQL не выполняются. После установки значения ON для этого параметра возвращаются подробные сведения о планируемом способе выполнения всех последующих инструкций Transact-SQL, пока значение этого параметра снова не будет изменено на OFF. Например, если инструкция CREATE TABLE выполняется, когда для параметра SET SHOWPLAN_XML установлено значение ON, SQL Server возвращает сообщение об ошибке от последующей инструкции SELECT из той же таблицы; указанная таблица не существует. Следовательно, последующие ссылки на эту таблицу не действуют. Если для параметра SET SHOWPLAN_XML установлено значение OFF, SQL Server выполняет инструкции без создания отчета.

Параметр SET SHOWPLAN_XML предназначен для возвращения вывода с типом nvarchar(max) для таких приложений, как служебная программа sqlcmd, в которой вывод XML последовательно используется другими инструментами для отображения и обработки сведений о плане запроса.

Примечание.

Динамическое представление управления возвращает те же сведения, sys.dm_exec_query_planчто и SET SHOWPLAN XML в xml-типе данных. Эти сведения возвращаются из столбца query_plansys.dm_exec_query_plan. Дополнительные сведения см. в разделе sys.dm_exec_query_plan (Transact-SQL).

Инструкцию SET SHOWPLAN_XML нельзя вызывать внутри хранимых процедур. Она должна быть единственной инструкцией в пакете.

Инструкция SET STATISTICS XML возвращает данные в виде набора XML-документов. Каждый пакет после выполнения инструкции SET SHOWPLAN_XML ON сопровождается выводом одного документа. Каждый документ содержит текст инструкций, входящих в пакет, за которым следуют подробные сведения об этапах выполнения команды. Документ отображает оценку издержек выполнения, количество строк, индексов, к которым был произведен доступ, типы выполненных операторов, порядок соединения и другие данные о планах выполнения.

Примечание.

Если в среде SQL Server Management Studio выбран параметр Включить действительный план выполнения, то выбор этой инструкции SET приводит к формированию отчета SHOWPLAN в формате XML. Снимите флажок Включить действительный план выполнения перед использованием параметра SET.

Предполагаемые планы выполнения с помощью SSMS и SET SHOWPLAN_XML доступны для выделенных пулов SQL (прежнее название — хранилище данных SQL) и выделенных пулов SQL в Azure Synapse Analytics. Чтобы получить фактический план выполнения для выделенных пулов SQL (ранее — хранилище данных SQL) и выделенных пулов SQL в Azure Synapse Analytics, существуют разные команды. Дополнительные сведения см. в статье "Мониторинг рабочей нагрузки выделенного пула SQL Azure Synapse Analytics с помощью динамических административных представлений".

Расположение выходных данных SHOWPLAN

Документ, содержащий XML-схему для вывода результатов в формате XML, определяемых инструкцией SET SHOWPLAN_XML, копируется во время настройки локального каталога на компьютере, на котором установлен Microsoft SQL Server. Этот документ находится на диске, содержащем установочные файлы SQL Server, по пути типа следующего:

  • \Microsoft SQL Server\130\Tools\Binn\schemas\sqlserver\2004\07\showplan\showplanxml.xsd

В приведенном выше пути узел 130\ используется сервером SQL Server 2016. Номер 130 определяется по первому узлу в значении, возвращаемом инструкцией SELECT @@VERSION, которое равно 13. Для SQL Server 2017 будет использоваться 140\путь, так как первый узел его @@VERSION значения равен 14. SQL Server 2019— первое значение от @@VERSION 15. SQL Server 2022, первое значение от @@VERSION 16.

Схему Showplan также можно найти в XML-схемах Microsoft SQL Server.

Разрешения

Для использования инструкции SET SHOWPLAN_XML требуются достаточные разрешения на выполнение инструкций, которые будут выполняться с после инструкции SET SHOWPLAN_XML, а также разрешение SHOWPLAN для всех баз данных, содержащих объекты, на которые ссылаются инструкции.

Для SELECT, INSERT, , DELETEUPDATEEXEC *stored_procedure*и EXEC *user_defined_function* инструкций, чтобы создать Showplan, пользователь должен:

  • Иметь необходимые разрешения на выполнение инструкций Transact-SQL.

  • Обладать разрешениями SHOWPLAN для всех баз данных, содержащих объекты (например таблицы, представления и т. д.), на которые ссылаются инструкции Transact-SQL.

Для всех других инструкций, таких как DDL, USE *database_name*, , SETDECLAREdynamic SQL и т. д., требуются только соответствующие разрешения для выполнения инструкций Transact-SQL.

Примеры

В следующих двух инструкциях используются параметры SET SHOWPLAN_XML для определения способа анализа и оптимизации SQL Server использования индексов в запросах.

Первый запрос использует оператор сравнения Equals (=) в предложении WHERE для индексированного столбца. Во втором запросе в предложении WHERE используется оператор LIKE. Это приводит к тому, что SQL Server использует поиск по кластеризованному индексу, чтобы найти удовлетворяющие условию в предложении WHERE данные. Значения в EstimateRows и EstimatedTotalSubtreeCost атрибутах меньше для первого индексированного запроса, указывая, что он обрабатывается гораздо быстрее и использует меньше ресурсов, чем неиндексированные запросы.

USE AdventureWorks2022;
GO
SET SHOWPLAN_XML ON;
GO
-- First query.
SELECT BusinessEntityID
FROM HumanResources.Employee
WHERE NationalIDNumber = '509647174';
GO
-- Second query.
SELECT BusinessEntityID, JobTitle
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Production%';
GO
SET SHOWPLAN_XML OFF;

Следующие шаги