Udostępnij za pośrednictwem


sp_create_plan_guide_from_handle (języka Transact-SQL)

Tworzy jednego lub kilku prowadnic plan na podstawie planu kwerendy w pamięci podręcznej planu.Ta procedura przechowywana umożliwia zapewnienie optymalizator kwerendy zawsze używa planu kwerendy specyficzne dla określonej kwerendy.Aby uzyskać więcej informacji na temat prowadnic planu zobacz Understanding Plan Guides.

Topic link iconKonwencje składni języka Transact-SQL

sp_create_plan_guide_from_handle [ @name = ] N'plan_guide_name'
    , [ @plan_handle = ] plan_handle
    , [ [ @statement_start_offset = ] { statement_start_offset | NULL } ]

Argumenty

  • [@ nazwa =] N ' plan_guide_name"
    To nazwa plan wykonania kwerendy.Plan guide names are scoped to the current database.plan_guide_name must comply with the rules for identifiers and cannot start with the number sign (#).Maksymalna długość plan_guide_name jest 124 znaków.

  • [@ plan_handle =] plan_handle
    Identifies a batch in the plan cache.plan_handle is varbinary(64).plan_handle can be obtained from the sys.dm_exec_query_stats dynamic management view.

  • [@ statement_start_offset =] { statement_start_offset | NULL}]
    Identifies the starting position of the statement within the batch of the specified plan_handle.statement_start_offset is int, with a default of NULL.

    Przesunięcie instrukcja odpowiada kolumnie statement_start_offset sys.dm_exec_query_stats dynamicznego zarządzania widoku.

    Jeśli określona została wartość NULL lub przesunięcie instrukcja nie jest określony, plan wykonania kwerendy jest tworzony dla każdej instrukcji w partia za pomocą plan wykonania kwerendy kwerendy dla dojścia określonego plan wykonania kwerendy.Wynikowy plan prowadnice są równoważne zaplanować prowadnic, używać wskazówki dotyczącej kwerendy PLAN USE, aby wymusić użycie określonego planu.

Remarks

Nie można utworzyć plan wykonania kwerendy dla wszystkich instrukcja typów.Jeśli nie można utworzyć plan wykonania kwerendy dla instrukcja w partia, procedura przechowywana ignoruje instrukcja i kontynuuje następnej instrukcja w tej instancji.Jeśli oświadczenie występuje wiele razy w tym samym partia, plan dla ostatniego wystąpienia jest włączona i poprzednich planów w instrukcja są wyłączone.Jeśli nie instrukcja w partia mogą być używane w przewodniku plan wykonania kwerendy, powstaje błąd 10532 i instrukcja nie powiedzie się.Firma Microsoft zaleca, aby zawsze uzyskać uchwytu planu z dynamiczny widok zarządzania sys.dm_exec_query_stats, aby zapobiec możliwości tego błędu.

Security noteSecurity Note:

sp_create_plan_guide_from_handle tworzy plan prowadnic oparte na planach znajdujące się w pamięci podręcznej planu.Oznacza to, że tekst partia Transact-SQL instrukcje i plan wykonania XML są pobierane (w tym wszelkie wartości literału przekazywane kwerendy) znak po znaku z pamięci podręcznej planu w wynikowym plan wykonania kwerendy. Tych ciągów tekstu mogą zawierać poufne informacje, które jest następnie przechowywany metadane w bazie danych.Użytkownicy mający odpowiednie uprawnienia mogą przeglądać te informacje przy użyciu widoku sys.plan_guides katalogu oraz plan wykonania kwerendy Właściwości pole dialogowe SQL Server Management Studio. W celu zapewnienia, że poufne informacje nie są ujawniane za pomocą plan wykonania kwerendy, zaleca się przeglądanie prowadnic plan utworzony z pamięci podręcznej plan wykonania kwerendy.

Tworzenie prowadnic plan dla wielu instrukcji w ramach planu kwerend

Podobnie jak sp_create_plan_guide, sp_create_plan_guide_from_handle usuwa plan kwerend dla ukierunkowanych partia lub modułu z pamięci podręcznej planu.Można to zrobić, aby zapewnić, że wszyscy użytkownicy rozpocząć korzystanie z przewodnika nowy plan.Podczas tworzenia plan wykonania kwerendy dla wielu instrukcji w ramach plan wykonania kwerendy jedną kwerendę, można odłożyć usunięcie plan wykonania kwerendy z pamięci podręcznej przez utworzenie prowadnic plan wykonania kwerendy w transakcja jawna.Ta metoda umożliwia plan wykonania kwerendy pozostają w pamięci podręcznej, dopóki transakcja została zakończona i tworzona jest plan wykonania kwerendy dla każdej określonej instrukcja.Patrz przykład B.

Uprawnienia

Wymaga VIEW_SERVER_STATE uprawnienia.Ponadto indywidualne uprawnienia są wymagane dla każdego plan wykonania kwerendy prowadnicy, utworzone przy użyciu sp_create_plan_guide_from_handle.Do utworzenia plan wykonania kwerendy typu OBJECT wymaga uprawnienia ALTER na obiekcie, do którego istnieje odwołanie.Do utworzenia plan wykonania kwerendy typu SQL lub TEMPLATE wymaga uprawnienia ALTER w bieżącej bazie danych.Aby określić typ przewodnika plan wykonania kwerendy, który zostanie utworzony, uruchom następującą kwerendę:

SELECT cp.plan_handle, sql_handle, st.text, objtype 
FROM sys.dm_exec_cached_plans AS cp
JOIN sys.dm_exec_query_stats AS qs ON cp.plan_handle = qs.plan_handle
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS st;

W wierszu, który zawiera informację, dla którego podczas tworzenia plan wykonania kwerendy, należy zbadać objtype kolumna zestaw wyników. Wartość Proc Wskazuje plan wykonania kwerendy jest typu OBJECT. Inne wartości, takie jak AdHoc lub Prepared Wskazuje typ SQL jest plan wykonania kwerendy.

Przykłady

A.Tworzenie plan wykonania kwerendy z plan wykonania kwerendy kwerendy w pamięci podręcznej plan wykonania kwerendy

Poniższy przykład tworzy plan wykonania kwerendy dla instrukcja SELECT jeden, określając plan wykonania kwerendy kwerendy z pamięci podręcznej plan wykonania kwerendy.W przykładzie rozpoczyna się od wykonywanie prosty SELECT Instrukcja, dla którego zostanie utworzony plan wykonania kwerendy. Plan dla tej kwerendy jest badany przy użyciu sys.dm_exec_sql_text i sys.dm_exec_text_query_plan dynamiczne zarządzanie widokami. plan wykonania kwerendy zostanie utworzona w kwerendzie przez określenie plan wykonania kwerendy kwerendy w pamięci podręcznej plan wykonania kwerendy, który jest skojarzony z kwerendą.Końcowe instrukcja w przykładzie sprawdza, czy istnieje plan wykonania kwerendy.

B.Tworzenie wielu prowadnic plan dla wieloma instrukcjami partia

Poniższy przykład tworzy plan wykonania kwerendy dla dwóch instrukcje wieloma instrukcjami partia.Plan prowadnice są tworzone transakcja jawna tak, aby zaplanować kwerendy partia nie jest usuwany z pamięci podręcznej plan wykonania kwerendy po utworzeniu pierwszą prowadnicą plan wykonania kwerendy.W przykładzie rozpoczyna się od wykonywanych z wieloma instrukcjami partia.Plan dla partia jest badany przy użyciu widoków dynamicznego zarządzania.Należy zauważyć, że zwracana jest wiersz dla każdej instrukcja w instancji.plan wykonania kwerendy jest tworzona przy pierwszym i trzecim sprawozdań w partia określając @statement\_start\_offset parametr. Końcowe instrukcja w przykładzie sprawdza, czy prowadnice planu istnieją.