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


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

Область применения: SQL Server База данных SQL Azure

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

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

Если вы запускаете запрос и записываете текст точно так же, как он был отправлен в SQL Server с помощью SQL Server Profiler, можно создать руководство по плану типа 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.

  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.

  4. Найдите событие Showplan XML для соответствующего запроса.

    Примечание.

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

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

См. также

sp_create_plan_guide (Transact-SQL)