읽을 수있는 보조에 대한 강제 계획


14

가용성 그룹의 기본에서 계획이 강제 실행되는 경우 계획은 보조 그룹에서 실행되는 쿼리에 적용됩니까?

계획 강제에 대한 두 가지 가능성을 모두 다루는 답변을 찾고 있습니다.

QS 강제 계획이 이행되지는 않지만 문서에서 권위있는 내용이나 계획 지침에 대한 내용을 찾을 수 없음을 나타내는 다음 내용을 읽었습니다.

강제 실행에 대한 결정적인 증거 는 이차 실행 계획에 존재 Use Plan하거나 PlanGuideNamePlanGuideDB속성 이있을 수 있습니다 .

답변:


18

쿼리 저장소 계획 적용은 보조의 쿼리에 영향을 미치지 않습니다.

Query Store를 사용하여 기본 계획을 강제로 계획 하면 보조 계획 을 강제로 계획하는 것처럼 보입니다 .

비영리 서버에서 쿼리를 실행 한 다음 쿼리 저장소를 플러시했습니다 sp_query_store_flush_db(데이터를 보조 서버와 동기화하는 데 필요함). 다음은 왼쪽에있는 보조 ( "읽기 전용"에 대한 동그라미로 표시된 경고에 유의하십시오)와 오른쪽에있는 보조입니다.

검색어 저장소 UI의 스크린 샷

이제 오른쪽의 "강제 계획"을 클릭 한 다음 두보기를 모두 새로 고칩니다.

두 강제 계획을 모두 보여주는 쿼리 저장소 UI의 스크린 샷

따라서 "강제"는 최소한 기본 쿼리 저장소 테이블에서 이어졌습니다. OP에 인용 된 기사가 장애 조치 후에도 쿼리 강제 실행이 제자리에 남아 있어야한다는 점을 감안할 때 이는 의미가 있습니다.

질문 : QDS는 기본 복제본에서 보조 복제본으로 데이터베이스 장애 조치를 수행 할 때 FORCED Plan 정보를 유지합니까?

답변 : 예. QDS는 sys.query_store_plan 테이블에 강제 계획 정보를 저장하므로 장애 조치의 경우 새 기본에서 동일한 동작을 계속 볼 수 있습니다.

그러나 강제 행동은 실제로 발생합니까? 이제 두 서버에서 동일한 쿼리를 실행하겠습니다. 기본적으로 예상대로 "UsePlan"속성이 계획 XML에 있습니다.

<QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="82"
           CompileCPU="78" CompileMemory="2104" UsePlan="true">

그리고 UI에서 :

"사용 계획"속성을 보여주는 SSMS 실행 계획의 스크린 샷

보조 서버 (다른 서버 이름 참고)에서는 계획이 강제 실행되지 않았습니다 . 다음은 동일한 계획 XML 스 니펫입니다.

<QueryPlan DegreeOfParallelism="1" MemoryGrant="11096" CachedPlanSize="288" CompileTime="32" 
           CompileCPU="28" CompileMemory="1656">

"사용 계획"속성이없는 SSMS 실행 계획의 스크린 샷

계획 지침은 보조의 쿼리에 영향을 미치지 않습니다

이 코드를 사용하여 기본에 대한 계획 지침을 만들었습니다 (무고한 사람을 보호하기 위해 테이블 ​​이름이 변경됨).

EXEC sp_create_plan_guide 
    @name = 'plan-guide-test',
    @stmt = N'SELECT TOP (1000) * 
FROM dbo.TableName t 
WHERE 
    NOT EXISTS 
    (
        SELECT NULL 
        FROM dbo.OtherTable o 
        WHERE t.Id = o.TableName
    );',
    @type = N'SQL',
    @module_or_batch = NULL,
    @hints = N'OPTION (MAXDOP 1)';

물론 실행 계획에 의해 입증 된대로 계획 지침은 기본에 효과적이었습니다.

<StmtSimple StatementCompId="1" StatementEstRows="1000" ... StatementType="SELECT" 
            PlanGuideDB="..._UAT" PlanGuideName="plan-guide-test" ...>

계획 지침 속성을 보여주는 SSMS 실행 계획의 스크린 샷

이 시점에서 계획 지침이 보조 계획에 복제되었음을 확인했습니다.

보조 쿼리에서 동일한 쿼리를 실행하면 실행 계획에 계획 지침에 의해 강제되는 모든 징후가 누락됩니다.

<StmtSimple StatementCompId="1" StatementEstRows="1000" ... StatementType="SELECT" 
            QueryHash="0xECF8A24F126EE77A" QueryPlanHash="0x0E93CF7FEAC1B6EA" 
            RetrievedFromCache="true" SecurityPolicyApplied="false">

계획 지침 속성이 누락 된 XML의 실행 계획 스크린 샷

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.