Поделиться через


Использование приложения SQL Server Profiler для создания и проверки руководств планов

Изменения: 5 декабря 2005 г.

При создании руководства плана приложение SQL Server Profiler может использоваться для извлечения точного текста запроса, который может использоваться в аргументе statement_text хранимой процедуры sp_create_plan_guide. Тем самым гарантируется, что во время компиляции руководство плана будет соответствовать запросу. После создания руководства плана приложение SQL Server Profiler может также использоваться для проверки того, что руководство плана действительно соответствует запросу. Обычно проверка руководства плана приложением SQL Server Profiler нужна, чтобы убедиться в том, что запрос соответствует руководству плана.

Извлечение текста запроса при помощи приложения SQL Server Profiler

Если выполняется запрос и при помощи приложения SQL Server Profiler извлекается текст точно в том виде, в котором он был представлен SQL Server, можно создать руководство плана типа SQL или TEMPLATE, которое будет точно соответствовать тексту запроса. Благодаря этому руководство плана может использоваться оптимизатором запросов.

Рассмотрим следующий запрос, представленный приложением в виде изолированного пакета:

SELECT COUNT(*) AS c
FROM Sales.SalesOrderHeader AS h
INNER JOIN Sales.SalesOrderDetail AS d
  ON h.SalesOrderID = d.SalesOrderID
WHERE h.OrderDate BETWEEN '20000101' and '20050101'

Предположим, необходимо, чтобы запрос был выполнен при помощи операции соединения слиянием, но SHOWPLAN указывает на то, что запрос не использует соединение слиянием. Запрос нельзя изменить непосредственно в приложении, поэтому создается руководство плана, определяющее, что подсказка MERGE JOIN должна быть присоединена к запросу во время компиляции.

Для извлечения текста запроса точно в том виде, в каком его получает SQL Server, выполните следующие шаги.

  1. Запустите трассировку в приложении SQL Server Profiler, выбрав тип события SQL:BatchStarting.
  2. Позвольте приложению выполнить запрос.
  3. Приостановите трассировку в приложении SQL Server Profiler.
  4. Щелкните событие SQL:BatchStarting, соответствующее запросу.
  5. Щелкните событие правой кнопкой мыши и выберите Извлечь данные события.
    ms188255.note(ru-ru,SQL.90).gifВажно!
    Не предпринимайте попыток скопировать текст пакета, выделяя его из нижней панели окна трассировки профайлера. Это может привести к несоответствию руководства плана исходному пакету.
  6. Сохраните данные события в файле. Это и будет текст пакета.
  7. Откройте в блокноте файл текста пакета и скопируйте текст в буфер копирования и вставки.
  8. Создайте руководство плана и вставьте скопированный текст внутри кавычек (''), заданных для аргумента @stmt. Одинарные кавычки в аргументе @stmt следует экранировать, поставив перед каждой одинарной кавычкой еще одну одинарную кавычку. Следите за тем, чтобы при вставке одинарных кавычек не были вставлены или удалены другие символы. Например, литерал даты '20000101' должен быть указан в следующем формате: ''20000101''.

Далее приводится руководство плана:

EXEC sp_create_plan_guide 
    @name = N'MyGuide1',
    @stmt = N'<paste the text copied from the batch text file here>',
    @type = N'SQL',
    @module_or_batch = NULL,
    @params = NULL,
    @hints = N'OPTION (MERGE JOIN)';

Проверка руководств планов при помощи приложения SQL Server Profiler

Чтобы убедиться в том, что руководство плана соответствует запросу, выполните следующие шаги.

  1. Запустите трассировку в приложении SQL Server Profiler, выбрав тип события Showplan XML (находится в узле Производительность).
  2. Позвольте приложению выполнить запрос.
  3. Приостановите трассировку в приложении SQL Server Profiler.
  4. Найдите событие Showplan XML для соответствующего запроса.
  5. Если руководство плана имеет тип OBJECT или SQL, убедитесь, что событие Showplan XML содержит атрибуты PlanGuideDB и PlanGuideName для руководства плана, которое, как ожидается, соответствует запросу. Если руководство плана имеет тип TEMPLATE, убедитесь, что событие Showplan XML содержит атрибуты TemplatePlanGuideDB и TemplatePlanGuideName для ожидаемого руководства плана. Тем самым производится проверка работы руководства плана. Эти атрибуты содержатся в элементе <StmtSimple> плана.

См. также

Основные понятия

Оптимизация запросов в используемых приложениях с помощью руководств планов

Другие ресурсы

Производительность запроса
sp_create_plan_guide (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

5 декабря 2005 г.

Новое содержимое:
  • Для шага 8 в теме «Извлечение текста запроса при помощи приложения SQL Server Profiler» добавлены сведения об экранировании одинарных кавычек аргумента @stmt.
  • Для шага 5 в теме «Проверка руководств планов при помощи приложения SQL Server Profiler» добавлены сведения о проверке правильности события «XML Showplans» в руководстве плана TEMPLATE.