Udostępnij za pośrednictwem


Using the USE PLAN Query Hint on Queries with Cursors

Można użyć wskazówki dotyczącej kwerendy USE PLAN w kwerendach, które określić żądania kursor.W poniższej tabela przedstawiono kombinacje opcje przewijania, które są obsługiwane przez PLAN użycia dla interfejsu API serwera kursory, kursor Transact-SQL kursory, które używają Transact-SQL Rozszerzone składnię, a Transact-SQL kursory za pomocą składni ISO.

Przewiń listę opcji (@ scrollopt wartość dla interfejsu API serwera kursorów)

USE PLAN obsługiwana dla interfejsu API serwera kursory

USE, PLAN, obsługiwane w przypadku kursory języka Transact-SQL, należy użyć składni Extended języka Transact-SQL

USE, PLAN, obsługiwane w przypadku kursory języka Transact-SQL, należy użyć składni ISO

STATYCZNE

Y

Y

Nie dotyczy

DYNAMICZNE

N

N

Nie dotyczy

ZESTAW KLUCZY

N

N

Nie dotyczy

FORWARD_ONLY

N

N

Nie dotyczy

FAST_FORWARD

Y

Y

Nie dotyczy

STATYCZNE FORWARD_ONLY

Nie dotyczy

Y

Nie dotyczy

NIEWRAŻLIWE

Nie dotyczy

Nie dotyczy

Y

Kwerendy zawierające kursory mają dwa planów kwerend związanych z nimi, zamiast jeden plan związane z kwerendami przesyłany bez kursorów.Plany te mogą być typu Open (otwarte), pobranie lub REFRESH, w zależności od typu kursor.

Jeden z dwóch planów kursor bezpośrednio jest generowany na podstawie kwerendy wejściowy i inny plan jest generowany automatycznie.Plany te są nazywane odpowiednio planu wprowadzania kwerendę i wygenerowany plan.W poniższej tabela przedstawiono plany, które są generowane dla kursory FAST_FORWARD i statyczny (INSENSITIVE).

Typ kursor

Plan otwarte kursor

Pobranie kursor planu

Odśwież planu kursor

FAST_FORWARD

Nie dotyczy

Kwerendy danych wejściowych

Generowane

STATYCZNE

Kwerendy danych wejściowych

Generowane

Nie dotyczy

Plany XML kwerendy dla kwerendy kursor czasami są wyświetlane jako pojedynczy dokument XML zawiera oba plany.Plany te są nazywane planów dwóch części.

Plany kursor czasami są wyświetlane jako dwa oddzielne pakiety.Na przykład w SQL Server Profiler śledzenia dla API statyczny lub Transact-SQL kursor planu kwerend, można wyświetlić tego dwa różne plan wykonania XML dla Compile do kwerendy zdarzeń są generowane.Tylko plan (OPEN) kwerendy danych wejściowych jest znacząca dla planu w tym przypadek wymuszania.Należy korzystać z planu wprowadzania kwerend w wskazówkę dotyczącą USE PLAN.Tworzony jest także proste wygenerowanym planem (Pobieranie), ale go nie jest wymagane, lub dozwolone dla wymuszanie planu.Można rozpoznać planu wprowadzania kwerendy (OPEN), ponieważ jest on planu, który zbiera pierwszy zestaw wierszy spełniających kwerendy kursor.

Important noteImportant Note:

Nie należy próbować wymusić noncursor plan dla kwerendy kursor lub odwrotnie.Wymuszanie plan może się nie powieść, jeśli to zrobisz, nawet wtedy, gdy kursor kwerendy i noncursor kwerendy są takie same.

Następujące typy wyjść planu kwerendy XML, opisujących planów kursor może służyć do wymuszenia plan z USE PLAN kursor określonych typów:

  • Plan dwóch części kursor

  • Plan kwerendy wprowadzania jednej części kursor

Plan kursor zostanie wymuszone może być planu uzyskanej za pomocą dowolnego z następujących mechanizmów uzyskiwania planu kwerendy XML:

  • Oparty na języku XML SQL Server Profiler śledzenia zdarzeń. Zdarzenia te mogą obejmować plan wykonania XML, plan wykonania XML dla Compile do kwerendy, and Profil Statystyka plan wykonania XML.

  • ZESTAW SHOWPLAN_XML DALEJ

  • STATYSTYKI zestaw W DANYCH XML

  • Dynamiczne zarządzanie widoki i funkcje, na przykład następująca kwerenda:

    SELECT *
    FROM sys.dm_exec_query_stats 
    CROSS APPLY sys.dm_exec_query_plan(plan_handle)
    

Posługując się interfejsu API serwera kursorów użycia przez aplikacje

Aplikacje biblioteki DB ODBC, ADO i OLEDB często współdziałać z SQL Server za pomocą interfejsu API serwera kursorów. You can see the calls that are submitted to API server cursor stored procedures by examining the SQL Server ProfilerRPC:Starting events when an application that is built by using one of these interfaces is running.

Przykład: Wymuszanie plan na podstawie kwerendy z kursor

W tym przykładzie założono, że korzystasz z aplikacji, która współpracuje z AdventureWorks konieczne jest wymuszenie plan dla kwerendy do bazy danych przy użyciu kursory ODBC, a SQL Server za pomocą procedury kursor serwera interfejsu API. Aby wymusić plan wykonania kwerendy, zebrać plan dla kwerendy przedstawione za pomocą kursor standardowego interfejsu API i następnie utworzenia plan wykonania kwerendy do wymuszenia plan dla tej kwerendy.Mieć aplikacji należy ponownie uruchomić kwerendę i plan, aby zweryfikować, że został już zmuszeni do zbadania.

Krok 1: Zbieranie plan

Uruchom SQL Server Profiler śledzenie i wybierz opcję plan wykonania XML and RPC: uruchamianie zdarzenia.Miał daną aplikację na wykonać kwerendy, dla którego chcesz wymusić planu.Kliknij przycisk RPC: uruchamianie zdarzenie, które są generowane.Załóżmy, że RPC: uruchamianie zdarzenie ma następujące dane tekstowe:

DECLARE @p1 int
SET @p1=-1
DECLARE @p2 int
SET @p2=0
DECLARE @p5 int
SET @p5=8
DECLARE @p6 int
SET @p6=8193
DECLARE @p7 int
SET @p7=0
EXEC sp_cursorprepexec @p1 OUTPUT,@p2 OUTPUT,NULL,N'SELECT * FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d WHERE h.SalesOrderID = d.SalesOrderID AND h.OrderDate BETWEEN ''20030101'' AND ''20040101''',@p5 OUTPUT,@p6 OUTPUT,@p7 OUTPUT
SELECT @p1, @p2, @p5, @p6, @p7

Zbieranie plan dla kwerendy przez kliknięcie prawym przyciskiem myszy plan wykonania XML śledzenia zdarzeń zawierających planu wprowadzania kwerendy dla kwerendy, która pojawia się jako argumentsp_cursorprepexec Instrukcja powyżej, a następnie zaznaczając pole wyboru Wyodrębnij dane zdarzeń.Zapisz dane zdarzenie (an XML plan wykonania) do pliku CursorPlan.SQLPlan na pulpicie.Skopiuj plik CursorPlan.SQLPlan to CursorPlan.txt.W SQL Server Management Studio, otwieranie CursorPlan.txt w oknie edytora.To save czas later, use Find and Replace to replace each single quotation mark (') in the plan with four single quotation marks ('''').Zapisz CursorPlan.txt.

Krok 2: Utwórz prowadnicę plan wymusić plan

Tworzenie plan wykonania kwerendy zapisu i wykonywania poniższych czynności sp_create_plan_guide Instrukcja wymusić plan wykonania kwerendy. Ta definicja plan wykonania kwerendy zawiera plan wykonania kwerendy XML przechwycone w poprzednim kroku w wskazówki dotyczącej kwerendy USE PLAN w plan wykonania kwerendy.

Pisząc tej definicji plan wykonania kwerendy wykonania kwerendy, Wklej zawartość CursorPlan.txt na odpowiednią pozycję @hints argument (tylko po OPTION(USE PLAN N'').

exec sp_create_plan_guide 
@name = N'CursorGuide1',
@stmt = N'SELECT * FROM Sales.SalesOrderHeader h, Sales.SalesOrderDetail d WHERE h.SalesOrderID = d.SalesOrderID AND h.OrderDate BETWEEN ''20030101'' AND ''20040101''',
@type = N'SQL',
@module_or_batch = NULL,
@params = NULL,
@hints = N'OPTION(USE PLAN N''<ShowPlanXML xmlns=''''https://schemas.microsoft.com/sqlserver/2004/07/showplan'''' Version=''''0.5'''' Build=''''9.00.1116''''><BatchSequence><Batch><Statements><StmtSimple>
   …
</StmtSimple></Statements></Batch></BatchSequence></ShowPlanXML>'')'

Krok 3: wykonać kwerendy i sprawdź, czy plan wykonania kwerendy jest stosowana do IT

Aplikacja, uruchom ponownie kwerendę i zbierania ich plan wykonania XML przy użyciu Showplan XML zdarzenie in SQL Server Profiler.

Kliknij przycisk plan wykonania XML zdarzenie dla planu.Należy skontaktować się z planem jest jeden wymuszone w plan wykonania kwerendy.

Kwerendy parametryczne kursor

If the API server cursor query that you want to create a plan guide for is parameterized, make sure you include both the statement string and the parameter definition string you see in the SQL Server ProfilerRPC:Starting event in the plan guide definition.Ciąg definicji parametru jest również wymagane do uzyskania dopasowania plan wykonania kwerendy wykonania kwerendy powiodła się, tak samo, jak to ma miejsce z kwerend parametrycznych przedstawione za pomocą sp_executesql.