Udostępnij za pośrednictwem


Specifying Query Parameterization Behavior by Using Plan Guides

Gdy opcja parametry bazy danych jest zestaw do SIMPLE, SQL Server optymalizator kwerendy może zdecydować, czy parameterize kwerendy. Oznacza to, że wartości literału, które są zawarte w kwerendzie są zastępowane z parametrami.Ten proces jest określany jako parametryzacja proste.Parametryzacja SIMPLE jest włączone, można kontrolować jakie kwerendy są parametryzowane i kwerendy, które nie są.Można jednak określić, czy wszystkie kwerendy w bazie danych zostać sparametryzowana przez ustawienie opcji bazy danych PARAMETRYZACJI FORCED.Ten proces jest określany jako parametryzacja wymuszony.

Użytkownik może zmienić zachowanie parametry bazy danych, za pomocą prowadnic planu w następujący sposób:

  • Gdy opcja parametry bazy danych jest zestaw SIMPLE, można określić tej wymuszone parametryzacji podejmowana jest próba na pewnej klasy kwerendy.Aby to zrobić, Tworzenie prowadnicy plan wykonania kwerendy TEMPLATE sparametryzowana formularzu kwerendy i określanie wskazówka ZMUSZONY PARAMETRYZACJI kwerendy w sp_create_plan_guide procedura przechowywana.Tego rodzaju plan wykonania kwerendy można traktować jako, aby włączyć wymuszone parametryzacji tylko na niektórych klasy z kwerendy zamiast wszystkie kwerendy.

  • Podczas FORCED ustawiono opcję Parametry bazy danych, można określić, że dla niektórych klasy z kwerendy, tylko proste parametryzacji podejmowana jest próba, unika parametry.Aby to zrobić, Tworzenie prowadnicy plan wykonania kwerendy TEMPLATE na formularzu sparametryzowana życie kwerendy i określanie PARAMETRYZACJI SIMPLE wskazówki dotyczącej kwerendy w sp_create_plan_guide.

Należy wziąć pod uwagę następujące kwerendy na AdventureWorks Baza danych:

SELECT pi.ProductID, SUM(pi.Quantity) AS Total
FROM Production.ProductModel AS pm 
    INNER JOIN Production.ProductInventory AS pi 
        ON pm.ProductModelID = pi.ProductID 
WHERE pi.ProductID = 101 
GROUP BY pi.ProductID, pi.Quantity HAVING SUM(pi.Quantity) > 50;

Administrator bazy danych zostaną określone, że nie chcesz włączyć parametryzacji wymuszone na wszystkie kwerendy w bazie danych.Jednak użytkownik chce uniknąć na wszystkie kwerendy są równoważne składniowo poprzedniej kwerendy, ale różnią się jedynie ich wartości literalnych stała koszty kompilacji.Innymi słowy należy kwerendę do parametrów, dzięki czemu zostanie ponownie użyty plan kwerend dla tego rodzaju kwerendę.W takim przypadek należy wykonać następujące czynności:

  1. Pobieranie sparametryzowana formularzu kwerendy.Tylko bezpieczny sposób uzyskania tej wartości do użycia w sp_create_plan_guide jest użycie sp_get_query_template systemu procedura przechowywana.

  2. Tworzenie plan wykonania kwerendy sparametryzowana formularza kwerendy, określając wskazówkę dotyczącą ZMUSZONY PARAMETRYZACJI kwerendy.

    Important noteImportant Note:

    W ramach parametryzacja kwerend, SQL Server Parametry, które zastępują wartości literałów, w zależności od wartości i rozmiar literał przypisuje typ danych. Ten sam proces odbywa się do wartości stała literały, przekazywane do @ stmt wyjściowy parametr sp_get_query_template.Ponieważ określony typ danych w @ params argumentusp_create_plan_guide musi odpowiadać, kwerendy, są parametryzowane przez SQL Server, może zajść potrzeba utworzenia więcej niż jeden plan dla pokrycia pełen zakres wartości można parametrów dla kwerendy. Aby uzyskać informacje o danych typów SQL Server przypisuje do parametrów po kwerendzie są parametryzowane, zobacz Parametryzacja wymuszony.

Poniższy skrypt może służyć zarówno do uzyskania kwerendy parametryczne, a następnie utworzyć plan wykonania kwerendy na niej:

DECLARE @stmt nvarchar(max);
DECLARE @params nvarchar(max);
EXEC sp_get_query_template 
    N'SELECT pi.ProductID, SUM(pi.Quantity) AS Total 
      FROM Production.ProductModel AS pm 
      INNER JOIN Production.ProductInventory AS pi ON pm.ProductModelID = pi.ProductID 
      WHERE pi.ProductID = 101 
      GROUP BY pi.ProductID, pi.Quantity 
      HAVING sum(pi.Quantity) > 50',
    @stmt OUTPUT, 
    @params OUTPUT;
EXEC sp_create_plan_guide 
    N'TemplateGuide1', 
    @stmt, 
    N'TEMPLATE', 
    NULL, 
    @params, 
    N'OPTION(PARAMETERIZATION FORCED)';

Podobnie w bazie danych, w którym wymuszone parametryzacji jest już włączony, można zapewnić przykładzie kwerendy i inne osoby, która składniowo równoważne, z wyjątkiem na stała wartości literału są parametryzowane zgodnie z regułami parametryzacji proste.W tym celu należy określić parametry SIMPLE zamiast PARAMETRYZACJI WYMUSZONE w klauzula OPTION.

Uwaga

TEMPLATE planu prowadzi instrukcje dopasowania do przedstawionych w plikach wsadowych, które składają się z pojedynczą instrukcją tylko kwerendy.Instrukcje wewnątrz wieloma instrukcjami instancje nie są uprawnione do dopasowania przy użyciu prowadnic planu TEMPLATE.