强制性的可读二级计划


14

如果计划是针对可用性组中的主数据库执行的,则该计划是否适用于在辅助数据库上运行的查询?

我正在寻找涵盖计划强制的两种可能性的答案:

我阅读了以下内容,这些内容表明QS强制计划不会继续存在,但找不到文档中的权威内容或有关计划指南的任何内容。

强迫的结论性证据将是二级执行计划中存在Use PlanPlanGuideNamePlanGuideDB属性。

Answers:


18

查询存储计划强制不影响辅助数据库上的查询

使用查询存储在主数据库上强制执行计划肯定看起来像是在辅助数据库上强制执行计划。

我尝试在非产品服务器上运行查询,然后使用刷新查询存储sp_query_store_flush_db(这是使数据同步到辅助服务器所必需的)。这是左侧的辅助按钮(请注意带圆圈的警告:“只读”),右侧是辅助按钮:

查询存储UI的屏幕截图

现在,单击右侧的“强制计划”,然后刷新两个视图:

查询商店用户界面的屏幕截图,显示了两个强制计划

因此,“强制”至少保留在基础查询存储表中。鉴于OP中引用的文章指出,在故障转移后查询强制应保留在原处:

问题:当数据库从主副本故障转移到辅助副本时,QDS是否会保留FORCED Plan信息?

答:是的,QDS将强制计划信息存储在sys.query_store_plan表中,因此,在进行故障转移的情况下,您将继续在新的主数据库上看到相同的行为。

但是强迫行为实际上发生了吗?现在,我将在两个服务器上运行相同的查询。在主数据库上,正如预期的那样,计划XML中包含“ UsePlan”属性:

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

在用户界面中:

SSMS中执行计划的屏幕快照,显示“使用计划”属性

在辅助服务器上(请注意不同的服务器名称),该计划未强制执行。这是相同的计划XML代码段:

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

SSMS中执行计划的屏幕截图,其中显示“使用计划”为no

计划指南不会影响辅助指南上的查询

我使用以下代码在主数据库上创建了一个计划指南(更改了表名以保护无辜者):

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中执行计划的屏幕快照,缺少计划指南属性

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.