다음을 통해 공유


sp_query_store_force_plan(Transact-SQL)

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스 Azure SQL Managed Instance

쿼리 저장소 특정 쿼리에 대해 특정 계획을 강제할 수 있습니다.

계획이 특정 쿼리에 대해 강제 적용되면 SQL Server는 해당 쿼리가 발생할 때마다 쿼리 최적화 프로그램의 계획을 강제로 실행하려고 합니다. 계획을 강제 적용하는 데 실패하면 확장 이벤트가 발생하고, 최적화 프로그램에게 일반적인 방법으로 최적화하도록 지시합니다.

Transact-SQL 구문 표기 규칙

구문

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

인수

[ @query_id = ] query_id

쿼리의 ID입니다. @query_id 기본값 없이 bigint입니다.

[ @plan_id = ] plan_id

강제 적용할 쿼리 계획의 ID입니다. @plan_id 기본값 없이 bigint입니다.

[ @disable_optimized_plan_forcing = ] disable_optimized_plan_forcing

최적화된 계획 강제 적용을 사용하지 않도록 설정해야 하는지 여부를 나타냅니다. @disable_optimized_plan_forcing 기본값0인 비트입니다.

[ @force_plan_scope = ] 'replica_group_id'

보조 복제본에 대한 쿼리 저장소 사용하도록 설정된 경우 보조 복제본에 대한 계획을 강제로 적용할 수 있습니다. 보조 복제본에서 실행 sp_query_store_force_plan 합니다 sp_query_store_unforce_plan . 선택적 @force_plan_scope 인수는 기본적으로 로컬 복제본(주 복제본 또는 보조 복제본)으로만 설정되지만 필요에 따라 sys.query_store_replicas 참조하는 replica_group_id 지정할 수 있습니다.

반환 코드 값

0(성공) 또는 1(실패).

설명

이 기능에 의해 강제 적용된 결과 실행 계획은 강제 적용되는 계획과 동일하거나 유사합니다. 결과 계획이 지정 sys.sp_query_store_force_plan한 계획과 동일하지 않을 수 있으므로 계획의 성능이 다를 수 있습니다. 드문 경우에서 성능 차이는 중요하고 부정적일 수 있습니다. 이 경우 관리자는 강제 계획을 제거해야 합니다.

sys.query_store_plan_forcing_locations 사용하여 보조 복제본에 대한 강제 계획을 검토합니다.

사용 권한

데이터베이스에 대한 ALTER 권한이 필요합니다.

예제

다음 예제에서는 쿼리 저장소 쿼리에 대한 정보를 반환합니다.

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;

강제 적용하려는 query_idplan_id 식별한 후 다음 예제를 사용하여 쿼리에서 계획을 사용하도록 강제 적용합니다.

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

sys.query_store_replicas 조인된 sys.query_store_plan_forcing_locations 사용하여 보조 복제본에 대한 쿼리 저장소 검색합니다.

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