Condividi tramite


sp_query_store_force_plan (Transact-SQL)

Si applica a: SQL Server 2016 (13.x) e versioni successive Database SQL di AzureIstanza gestita di SQL di Azure

Abilita l'uso forzato di un piano specifico per una determinata query nell'archivio query.

Quando un piano viene forzato per una query specifica, ogni volta che SQL Server rileva la query, tenta di forzare il piano in Query Optimizer. Se l'uso forzato del piano ha esito negativo, viene generato un evento esteso e Query Optimizer viene indicato di ottimizzare in modo normale.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

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'
[ ; ]

Argomenti

Importante

Gli argomenti per le stored procedure estese devono essere immessi nell'ordine specifico, come descritto nella sezione Sintassi. Se i parametri vengono immessi in ordine non corretto, si verifica un messaggio di errore.

[ @query_id = ] query_id

ID della query. @query_id è bigint, senza impostazione predefinita.

[ @plan_id = ] plan_id

ID del piano di query da forzare. @plan_id è bigint, senza impostazione predefinita.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

Indica se l'uso forzato del piano ottimizzato deve essere disabilitato. @disable_optimized_plan_forcing è bit con un valore predefinito .0

[ @force_plan_scope = ] 'replica_group_id'

È possibile forzare i piani in una replica secondaria quando Query Store per le repliche secondarie è abilitato. Eseguire sp_query_store_force_plan e sp_query_store_unforce_plan nella replica primaria. L'utilizzo dell'argomento @force_plan_scope viene impostato per impostazione predefinita sulla replica locale in cui viene eseguito il comando, ma è possibile specificare un replica_group_id che fa riferimento alla vista del catalogo di sistema sys.query_store_plan_forcing_locations.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

Il piano di esecuzione risultante forzato da questa funzionalità è lo stesso o simile al piano forzato. Poiché il piano risultante potrebbe non essere identico al piano specificato da sys.sp_query_store_force_plan, le prestazioni dei piani possono variare. In rari casi, la differenza di prestazioni potrebbe essere significativa e negativa; in tal caso, l'amministratore deve rimuovere il piano forzato.

Esaminare i piani forzati nelle repliche secondarie con sys.query_store_plan_forcing_locations.

Autorizzazioni

È necessaria l'autorizzazione ALTER per il database.

Esempi

Nell'esempio seguente vengono restituite informazioni sulle query in Query Store.

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;

Dopo aver identificato il query_id e plan_id da forzare, usare l'esempio seguente per forzare l'uso di un piano da parte della query.

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

Usare sys.query_store_plan_forcing_locations, unito con sys.query_store_replicas, per recuperare Query Store per le repliche secondarie.

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';