Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
azure SQL Database
Při vytváření průvodce plánem můžete použít SQL Server Profiler k zachycení přesného textu dotazu pro použití v argumentu statement_text uložené procedury sp_create_plan_guide. To pomáhá zajistit, aby se průvodce plánem při kompilaci shodoval s dotazem. Po vytvoření průvodce plánem je možné sql Server Profiler použít také k otestování, že průvodce plánem se ve skutečnosti shoduje s dotazem. Obecně byste měli testovat průvodce plánem pomocí SQL Server Profileru, abyste ověřili, že váš dotaz je přiřazen k vašemu průvodci plánem.
Zachycení textu dotazu pomocí SQL Server Profileru
Pokud spustíte dotaz a zachytíte text přesně tak, jak byl odeslán na SQL Server pomocí SQL Server Profileru, můžete vytvořit průvodce plánem typu SQL nebo ŠABLONY, který přesně odpovídá textu dotazu. Tím zajistíte, že optimalizátor dotazů používá průvodce plánem.
Představte si následující dotaz, který odešle aplikace jako samostatná dávka:
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';
Předpokládejme, že chcete, aby se tento dotaz spustil pomocí operace sloučení spojení, ale SHOWPLAN indikuje, že dotaz nepoužívá slučovací spojení. Dotaz nelze změnit přímo v aplikaci, takže místo toho vytvoříte průvodce plánem, který určí, že dotaz MERGE JOIN bude připojen k dotazu v době kompilace.
Pokud chcete zachytit text dotazu přesně tak, jak ho SQL Server přijme, postupujte takto:
Spusťte trasování SQL Server Profiler a ujistěte se, že je vybraný typ události SQL:BatchStarting.
Požádejte aplikaci, aby dotaz spustila.
Pozastavte trasování sql Serveru Profiler.
Klikněte na událost SQL:BatchStarting, která odpovídá dotazu.
Klikněte pravým tlačítkem a vyberte Extrahovat data událostí.
Důležitý
Nepokoušejte se zkopírovat dávkový text tak, že ho vyberete ve spodním podokně okna sledování Profileru. Může to způsobit, že průvodce plánu, který vytvoříte, neshoduje se s původní dávkou.
Uložte data události do souboru. Toto je dávkový text.
Otevřete dávkový textový soubor v Poznámkovém bloku a zkopírujte text do vyrovnávací paměti pro kopírování a vložení.
Vytvořte průvodce plánu a vložte zkopírovaný text do uvozovek ('') určených pro argument @stmt. V argumentu @stmt je nutné každý jednoduchý apostrof uprchnout tak, že mu předchází další jednoduchý apostrof. Při vkládání těchto jednoduchých uvozovek dávejte pozor, abyste nepřidávejte ani neodebílali žádné další znaky. Například literál data '20000101' musí být oddělen jako ''20000101''.
Tady je průvodce plánem:
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)';
Průvodce testovacím plánem s využitím SQL Server Profileru
Pokud chcete ověřit, že se průvodce plánem shoduje s dotazem, postupujte takto:
Spusťte trasování SQL Server Profiler a ověřte, že je vybraný typ události Showplan XML (umístěný pod uzlem Výkon).
Požádejte aplikaci, aby dotaz spustila.
Pozastavte trasování nástrojem SQL Server Profiler.
Vyhledejte událost Showplan XML ovlivněného dotazu.
Poznámka
Událost Showplan XML pro kompilaci dotazu nelze použít. PlanGuideDB v této události neexistuje.
Pokud je průvodce plánem typu OBJECT nebo SQL, ověřte, že událost Showplan XML obsahuje atributy PlanGuideDB a PlanGuideName pro průvodce plánem, který by měl odpovídat dotazu. Nebo v případě průvodce plánem šablony ověřte, zda událost Showplan XML obsahuje atributy TemplatePlanGuideDB a TemplatePlanGuideName očekávaného průvodce plánem. Tím ověříte, že průvodce plánem funguje. Tyto atributy jsou obsaženy v elementu <StmtSimple> plánu.