sp_query_store_force_plan (Transact-SQL)

Si applica a: SQL Server 2016 (13.x) e versioni successive database SQL di Azure Istanza 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 di 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

[ @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 secondaria. L'argomento facoltativo @force_plan_scope viene impostato come predefinito solo sulla replica locale (primaria o secondaria), ma facoltativamente è possibile specificare un replica_group_id che fa riferimento a sys.query_store_replicas.

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 può 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 a sys.query_store_replicas, per recuperare i piani di Query Store forzati in tutte 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';