Существует несколько способов получения плана выполнения, который будет зависеть от ваших обстоятельств.Обычно вы можете использовать SQL Server Management Studio для получения плана, однако, если по какой-то причине вы не можете выполнить свой запрос в SQL Server Management Studio, вам может быть полезно иметь возможность получить план с помощью SQL Server Profiler или путем проверкикэш плана.
Метод 1 - Использование SQL Server Management Studio
SQL Server поставляется с парой полезных функций, которые очень упрощают захват плана выполнения, просто убедитесь, что "Пункт меню «Включить фактический план выполнения» (находится в меню «Запрос») установлен и запускает ваш запрос как обычно.
Если вы пытаетесь получить план выполнения дляоператоры в хранимой процедуре, то вы должны выполнить хранимую процедуру, например так:
exec p_Example 42
Когда ваш запрос завершится, вы увидите дополнительную вкладку под названием «План выполнения», появившуюся на панели результатов.Если вы выполнили много операторов, вы можете увидеть много планов, отображаемых на этой вкладке.
Отсюда вы можете просмотреть план выполнения в SQL Server Management Studio или щелкнуть правой кнопкой мыши назапланируйте и выберите «Сохранить план выполнения как ...», чтобы сохранить план в файл в формате XML.
Метод 2 - Использование параметров SHOWPLAN
Этот метод очень похож на метод 1 (на самом деле это то, что делает SQL Server Management Studio внутренне), однако я включил его для полноты или если у вас нет SQL Server Management Studio.
Перед тем как выполнить запрос, запустите one из следующих утверждений.Этот оператор должен быть единственным оператором в пакете, т. Е. Вы не можете одновременно выполнить другой оператор:
SET SHOWPLAN_TEXT ON
SET SHOWPLAN_ALL ON
SET SHOWPLAN_XML ON
SET STATISTICS PROFILE ON
SET STATISTICS XML ON -- The is the recommended option to use
Это параметры подключения, поэтому его нужно запускать только один раз для каждого подключения.С этого момента все выполняемые операторы будут сопровождаться дополнительным набором результатов , содержащим ваш план выполнения в нужном формате - просто выполните запрос, как обычно, чтобы увидеть план.
Как только выКогда вы закончите, вы можете отключить эту опцию с помощью следующего оператора:
SET <<option>> OFF
Сравнение форматов плана выполнения
Если у вас нет сильных предпочтений, я рекомендую использовать опцию STATISTICS XML
.Этот параметр эквивалентен параметру «Включить фактический план выполнения» в SQL Server Management Studio и предоставляет наибольшую информацию в наиболее удобном формате.
SHOWPLAN_TEXT
- отображает базовый текстовый примерный план выполнения, без выполнения запроса SHOWPLAN_ALL
- отображает текстовый оценочный план выполнения с оценками затрат, без выполнения запроса SHOWPLAN_XML
- отображает основанный на XML расчетный план выполнения с оценками затратбез выполнения запроса.Это эквивалентно параметру «Показать примерный план выполнения ...» в SQL Server Management Studio. STATISTICS PROFILE
- выполняет запрос и отображает текстовый план фактического выполнения. STATISTICS XML
- выполняет запрос и отображает фактический план выполнения на основе XML.Это эквивалентно параметру «Включить фактический план выполнения» в SQL Server Management Studio.
Метод 3 - Использование SQL Server Profiler
Если вы не можете выполнить запрос напрямую (или ваш запрос не выполняется медленно, когда вы выполняете его напрямую (помните, что мы хотим, чтобы план запроса выполнялся плохо), тогда вы можете захватить план, используя трассировку SQL Server Profiler.Идея состоит в том, чтобы выполнить ваш запрос во время трассировки, которая захватывает одно из событий «Showplan».
Обратите внимание, что в зависимости от нагрузки вы можете использовать этот метод в производственной среде, однако вам, очевидно, следует соблюдать осторожность. Механизмы профилирования SQL Server разработаны таким образом, чтобы минимизировать влияние на базу данных, но это не означает, что никакого влияния на производительность не будет . У вас также могут возникнуть проблемы с фильтрацией и определением правильного плана в вашей трассировке, если ваша база данных интенсивно используется. Вам, очевидно, следует обратиться к администратору базы данных, чтобы узнать, довольны ли они тем, что вы делаете это на своей драгоценной базе данных!
Откройте SQL Server Profiler и создайте новую трассировку, соединяющуюся с нужной базой данных, для которой вы хотите записать трассировку.
На вкладке «Выбор событий» установите флажок «Показать все события», проверьте строку «Производительность» -> «Showplan XML» и запустите трассировку.
Пока трассировка выполняется, делайте все, что вам нужно, чтобы запустить медленный запрос.
Дождитесь завершения запроса и остановите трассировку.
Чтобы сохранить трассировку, щелкните правой кнопкой мыши план xml в SQL Server Profiler и выберите «Извлечь данные события ...», чтобы сохранить план в файл в формате XML.
План, который вы получаете, эквивалентен параметру «Включить фактический план выполнения» в SQL Server Management Studio.
Метод 4 - Проверка кэша запросов
Если вы не можете выполнить свой запрос напрямую, а также не можете получить трассировку профилировщика, тогда вы все равно можете получить приблизительный план, проверив кэш плана запросов SQL.
Мы проверяем кэш плана, запрашивая у SQL Server DMV . Ниже приведен базовый запрос, в котором будут перечислены все кэшированные планы запросов (в формате xml) вместе с текстом SQL. В большинстве баз данных вам также нужно будет добавить дополнительные условия фильтрации, чтобы отфильтровать результаты по интересующим вас планам.
SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
Выполните этот запрос и нажмите на XML плана, чтобы открыть план в новом окне - щелкните правой кнопкой мыши и выберите «Сохранить план выполнения как ...», чтобы сохранить план в файл в формате XML.
Примечания:
Поскольку здесь задействовано так много факторов (от таблицы и схемы индекса до хранимых данных и статистики таблицы), вам следует всегда пытаться получить план выполнения из интересующей вас базы данных. (обычно тот, который испытывает проблемы с производительностью).
Невозможно записать план выполнения для зашифрованных хранимых процедур.
"фактические" и "расчетные" планы выполнения
фактический план выполнения - это тот, в котором SQL Server фактически выполняет запрос, тогда как предполагаемый план выполнения SQL Server определяет, что он будет делать без выполнения запрос. Несмотря на логическую эквивалентность, фактический план выполнения гораздо полезнее, поскольку он содержит дополнительные сведения и статистику о том, что на самом деле произошло при выполнении запроса. Это важно при диагностике проблем, при которых оценки SQL Server отключены (например, когда статистика устарела).
Как мне интерпретировать план выполнения запроса?
Это тема, достойная (бесплатной) книги сама по себе.
Смотри также: