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

При создании структуры плана приложение Приложение 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. Щелкните событие правой кнопкой мыши и выберите Извлечь данные события.

    Важное примечаниеВажно!

    Не предпринимайте попыток скопировать текст пакета, выделяя его из нижней панели окна трассировки профайлера. Это может привести к несоответствию структуры плана исходному пакету.

  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 для соответствующего запроса.

    ПримечаниеПримечание

    Событие XML-код инструкции Showplan компиляции запроса использовать нельзя. PlanGuideDB не существует в этом событии.

  5. Если структура плана имеет тип OBJECT или SQL, убедитесь, что событие Showplan XML содержит атрибуты PlanGuideDB и PlanGuideName для структуры плана, которая, как ожидается, соответствует запросу. Если структура плана имеет тип TEMPLATE, убедитесь, что событие Showplan XML содержит атрибуты TemplatePlanGuideDB и TemplatePlanGuideName для ожидаемой структуры плана. Тем самым производится проверка работы структуры плана. Эти атрибуты содержатся в элементе <StmtSimple> плана.

См. также

Справочник

sp_create_plan_guide (Transact-SQL)