Udostępnij za pośrednictwem


sp_query_store_force_plan (Transact-SQL)

Dotyczy: SQL Server 2016 (13.x) i nowszych Azure SQL DatabaseAzure SQL Managed Instance

Umożliwia wymuszanie określonego planu dla określonego zapytania w magazynie zapytań.

Gdy plan jest wymuszany dla określonego zapytania, za każdym razem, gdy program SQL Server napotka zapytanie, próbuje wymusić plan w optymalizatorze zapytań. Jeśli wymuszanie planu zakończy się niepowodzeniem, zostanie wyzwolone zdarzenie rozszerzone, a optymalizator zapytań zostanie poinstruowany o optymalizację w normalny sposób.

Transact-SQL konwencje składni

Składnia

sp_query_store_force_plan
    [ @query_id = ] query_id ,
    [ @plan_id = ] plan_id ,
    [ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing ,
    [ @force_plan_scope = ] 'replica_group_id'
[ ; ]

Argumenty (w programowaniu)

Ważne

Argumenty dla rozszerzonych procedur składowanych należy wprowadzić w określonej kolejności zgodnie z opisem w sekcji składni. Jeśli parametry są wprowadzane poza kolejnością, wystąpi komunikat o błędzie.

[ @query_id = ] query_id

Identyfikator zapytania. @query_id jest bigint, bez wartości domyślnej.

[ @plan_id = ] plan_id

Identyfikator planu zapytania, który ma zostać wymuszony. @plan_id jest bigint, bez wartości domyślnej.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

Wskazuje, czy wymuszenie zoptymalizowanego planu powinno być wyłączone. @disable_optimized_plan_forcing jest nieco z wartością domyślną 0.

[ @force_plan_scope = ] 'replica_group_id'

Plany można wymusić na repliki pomocniczej, gdy jest włączony magazyn zapytań dla czytelnych sekund . Wykonaj sp_query_store_force_plan i sp_query_store_unforce_plan w repliki podstawowej. Używając argumentu @force_plan_scope domyślnie do repliki lokalnej, w której jest wykonywane polecenie, ale można określić replica_group_id odwołującą się do widoku wykazu systemu sys.query_store_plan_forcing_locations.

Zwracanie wartości kodu

0 (powodzenie) lub 1 (niepowodzenie).

Uwagi

Wynikowy plan wykonania wymuszony przez tę funkcję jest taki sam lub podobny do wymuszanego planu. Ponieważ wynikowy plan może nie być identyczny z planem określonym przez sys.sp_query_store_force_planprogram , wydajność planów może się różnić. W rzadkich przypadkach różnica wydajności może być znacząca i ujemna; w takim przypadku administrator musi usunąć wymuszony plan.

Przejrzyj plany wymuszone na replikach pomocniczych przy użyciu sys.query_store_plan_forcing_locations.

Uprawnienia

Wymaga uprawnienia ALTER w bazie danych.

Przykłady

Poniższy przykład zwraca informacje o zapytaniach w magazynie zapytań.

SELECT txt.query_text_id,
       txt.query_sql_text,
       pl.plan_id,
       qry.*
FROM sys.query_store_plan AS pl
     INNER JOIN sys.query_store_query AS qry
         ON pl.query_id = qry.query_id
     INNER JOIN sys.query_store_query_text AS txt
         ON qry.query_text_id = txt.query_text_id;

Po zidentyfikowaniu query_id i plan_id , które chcesz wymusić, użyj poniższego przykładu, aby wymusić użycie planu przez zapytanie.

EXECUTE sp_query_store_force_plan
    @query_id = 3,
    @plan_id = 3;

Użyj sys.query_store_plan_forcing_locations, połączonego z sys.query_store_replicas, aby pobrać magazyn zapytań dla czytelnych sekund.

SELECT query_plan
FROM sys.query_store_plan AS qsp
     INNER JOIN sys.query_store_plan_forcing_locations AS pfl
         ON pfl.query_id = qsp.query_id
     INNER JOIN sys.query_store_replicas AS qsr
         ON qsr.replica_group_id = qsp.replica_group_id
WHERE qsr.replica_name = 'yourSecondaryReplicaName';