Books and articles about SQL Rambler's Top100 Сменить язык на: Русский 24 June 2019 17:14:21


www.sql-ex.ru
Skip Navigation Links  

 

Print  Версия для печати

На главную страницу

Отображение планов выполнения

Randy Dyess (оригинал 2003: Displaying Execution Plans)
Перевод Калинкин В.Ю.

Не так давно я опубликовал статью, описывающую основной план, используемый при оптимизации существующих или вновь создаваемых запросов. После короткого обсуждения с издателями на www.SQLServerCentral.Com возможности создать новую серию статей, я решил побеседовать снова на эту тему и написать серию статей по оптимизации и настройке запросов Transact-SQL. По замыслу этой серии, начав с основ планов выполнения, мы достигнем более глубокого понимания и закончим статьями о других методах, используемые для оптимизации и настройки хранимых процедур. Вы можете просмотреть план-проспект статей по оптимизации запросов на моем сайте www.TransactSQL.Com, чтобы понять, каким образом будет построена эта серия статей. Также у меня есть намерение написать небольшие статьи, чтобы более детально объяснять какие-либо места в крупных ежемесячных статьях, которые будут оставлять вопросы у читателей. Так что присылайте на адрес Randy Dyess любые вопросы, которые возникнут у вас по статье, и я или отвечу вам напрямую, или создам небольшую статью с ответом на ваш вопрос.

Планы выполнения: основы

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

Планы выполнения могут быть представлены либо графически, либо в текстовом формате в зависимости от метода получения плана выполнения. Query Analyzer и небольшая группа средств от сторонних разработчиков (лично я использую mssqlXpress, доступный на www.xpressapps.com) имеют возможность превращать текстовый план в легко читаемый набор пиктограмм. Дальше остается только понять смысл разных пиктограмм и узнать, как детализировать пиктограмму, чтобы получить развернутые сведения.

Если Вы не используете Query Analyzer или имеете средство от сторонних разработчиков, то можете использовать Transact-SQL для отображения плана выполнения в текстовом виде. Transact-SQL предоставляет несколько команд для отображения планов выполнения: SET STATISTICS PROFILE, SET STATISTICS IO, SET STATISTICS TIME, SET SHOWPLAN_ALL и SET SHOWPLAN_TEXT. Вы можете использовать одну или все из этих команд, чтобы отображать план выполнения в текстовом виде с различными уровнями детализации информации плана.

Графические планы выполнения

Большинство разработчиков предпочитают графические планы выполнения, отображаемые в Query Analyzer или в средствах сторонних разработчиков т.к. они позволяют определить основные проблемы с производительностью запроса с одного взгляда. Хотя вид графического плана выполнения зависит от используемого приложения, большинство пиктограмм, используемых там очень похожи по смыслу и внешнему виду. Несколько примеров ниже покажут вам, получить графические планы выполнения при помощи Query Analyzer. Если вы используете средство сторонних разработчиков в своей работе, пожалуйста, посмотрите в справочнике к данному средству раздел про планы выполнения, чтобы узнать, как отобразить план графически.

Графические планы выполнения в Query Analyzer

Когда вы загрузили свой запрос или написали вызов ХП в окне редактора, нажмите “Query” на панели инструментов и затем выберите “Show Execution Plan”. Выполните запрос и после его завершения выберите закладку “Execution Plan” чтобы увидеть графический план выполнения.

Пример 1.
Наберите следующий запрос, разрешите вывод плана выполнения и затем выполните запрос.

--Изменить текущую БД на pubs
USE pubs
GO

--Извлечь информацию из таблицы authors
SELECT * FROM pubs.dbo.authors
GO

Вывод плана выполнения

Предварительные графические планы в Query Analyzer

Как можно видеть из примера выше, “Show Execution Plan” в действительности выполнит запрос или ХП и выведет план выполнения, использованный оптимизатором в отдельное окно. Но как поступить, если вы не хотите, чтобы запрос в действительности выполнялся, а лишь хотите получить представление о том, что оптимизатор собирается делать? Query Analyzer позволяет просто отобразить предварительный план выполнения без фактического выполнения запроса или ХП. Это делается с помощью средства “Display Estimated Execution Plan”.

Следует помнить, что вы не можете создать предварительный план выполнения, если ваш запрос содержит временные объекты или ссылается на объекты, которые создаются самим запросом, а не существовали прежде. Вам придется сначала построить требуемый временный или постоянный объект, а затем получить предварительный план.

Когда вы загрузили ваш запрос или создали вызов ХП в окне редактора, нажмите “Query” на панели инструментов, затем выберите “Display Estimated Execution Plan”. Выполните запрос и, после завершения выполнения, выберите закладку “Estimated Execution Plan” чтобы увидеть графическое представление плана.

Пример 2.
Наберите следующий запрос, разрешите вывод приближенного плана выполнения и затем выполните запрос.

--Изменить текущую БД на pubs
USE pubs
GO

--Извлечь информацию из таблицы authors
SELECT * FROM pubs.dbo.authors
GO

Вывод предварительного плана выполнения

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

Или же можно поместить курсор над линией, соединяющей две пиктограммы.

Текстовые планы выполнения

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

SET SHOWPLAN_ALL

SET SHOWPLAN_ALL инструктирует SQL Server не выполнять операторы Transact-SQL, но вернуть подробную информацию о том, как эти операторы будут выполняться и предоставить приближенную оценку данных операторов по требовательности к ресурсам.

Синтаксис
SET SHOWPLAN_ALL {ON | OFF}

Пример 3.
Напишите и выполните следующий запрос.

--Включить SET SHOWPLAN_ALL
SET SHOWPLAN_ALL ON
GO

--Изменить текущую БД на pubs
USE pubs
GO

--Извлечь информацию из таблицы authors
SELECT * FROM pubs.dbo.authors
GO

Вывод SET SHOWPLAN_ALL:

SET SHOWPLAN_TEXT

SET SHOWPLAN_ TEXT инструктирует SQL Server не выполнять операторы Transact-SQL, но вернуть подробную информацию о том, как эти операторы будут выполняться.

Синтаксис
SET SHOWPLAN_TEXT {ON | OFF}

Пример 4.
Напишите и выполните следующий запрос.

--Включить SET SHOWPLAN_TEXT
SET SHOWPLAN_TEXT ON
GO

--Изменить текущую БД на pubs
USE pubs
GO

--Извлечь информацию из таблицы authors
SELECT * FROM pubs.dbo.authors
GO

Вывод SET SHOWPLAN_TEXT:

SET STATISTICS PROFILE

SET STATISTICS PROFILE инструктирует SQL Server отображать информацию о параметрах для оператора после его выполнения.

Синтаксис
SET STATISTICS PROFILE {ON | OFF}

Пример 5.
Напишите и выполните следующий запрос.

--Включить SET STATISTICS PROFILE
SET STATISTICS PROFILE ON
GO

--Изменить текущую БД на pubs USE pubs
GO

--Извлечь информацию из таблицы authors
SELECT * FROM pubs.dbo.authors
GO

Вывод SET STATISTICS PROFILE:

SET STATISTICS IO

SET STATISTICS IO инструктирует SQL Server отображать информацию об объеме дисковой активности, создаваемой операторами Transact-SQL. Информация выводится после выполнения оператора.

Синтаксис
SET STATISTICS IO {ON | OFF}

Пример 6.
Напишите и выполните следующий запрос.

--Включить SET STATISTICS IO
SET STATISTICS IO ON
GO

--Изменить текущую БД на pubs
USE pubs
GO

--Извлечь информацию из таблицы authors
SELECT * FROM pubs.dbo.authors
GO

Вывод SET STATISTICS IO:

SET STATISTICS TIME

SET STATISTICS TIME инструктирует SQL Server отображать число миллисекунд, потребовавшихся чтобы разобрать и скомпилировать запрос. Информация выводится после выполнения каждого оператора.

Синтаксис SET STATISTICS TIME {ON | OFF}

Пример 7.
Напишите и выполните следующий запрос.

--Включить SET STATISTICS TIME
SET STATISTICS TIME ON
GO

--Изменить текущую БД на pubs
USE pubs
GO

--Извлечь информацию из таблицы authors
SELECT * FROM pubs.dbo.authors
GO

Вывод SET STATISTICS TIME:

В этой первой статье мы рассмотрели лишь основы отображения плана выполнения с использованием Query Analyzer или команд Transact-SQL. Следующая статья этой серии направлена на понимание вывода этих планов выполнения путем подробного рассмотрения детализированной информации, возвращаемой вместе с планом выполнения.

На главную страницу

Print  Версия для печати


Usage of any materials of this site is possible
only under condition of mandatory allocation of the direct link to a site
http://www.sqlbooks.ru
on each page where used materials are placed.

 Main   Articles    Books 
Рейтинг@Mail.ru Rambler's Top100 Alt Упражнения по SQL: обучение, тестирование, сертификация по языку SQL Copyright c 2002-2006. All rights reserved.