比较执行计划

适用范围:SQL Server

本文介绍如何使用 SQL Server Management Studio 计划比较功能比较实际图形执行计划之间的相似性和差异。 此功能从 SQL Server Management Studio v16 开始提供。

注意

执行 Transact-SQL 查询或批处理后,将生成实际的执行计划。 因此,实际执行计划包含运行时信息,例如实际行数、资源使用情况指标和运行时警告(如果有)。 有关详细信息,请参阅 显示实际执行计划

比较计划的能力是数据库专业人员出于故障排除原因可能需要执行的作:

  • 查明为何查询或批处理速度突然降低。
  • 了解查询重写的效果。
  • 了解架构设计中引入的特定性能增强更改(如新索引)是如何有效改变执行计划的。

计划比较 ”菜单选项允许并行比较两个不同的执行计划,以便更轻松地识别相似性和更改,这些更改解释了前面所述的所有原因的不同行为。 此选项可比较:

  • 两个以前保存的执行计划文件(.sqlplan 扩展名)。
  • 一个活动的执行计划和一个以前保存的查询执行计划。
  • 查询存储中两个选定的查询计划。

提示

计划比较适用于所有 .sqlplan 文件,包括较旧版本的 SQL Server 文件。 此外,此选项还支持脱机比较,因此无需连接 SQL Server 实例。

比较两个执行计划时,本质上执行相同操作的计划区域会以相同颜色和样式突出显示。 在一个计划中选择彩色区域会将另一个计划集中在该计划中的匹配节点上。 仍可以对不同执行计划中不匹配的运算符和节点进行比较,但在这种情况下,必须手动选择运算符才能比较。

重要

只有那些会改变计划整体形状的节点会用来检查计划之间的相似性。 因此,在计划同一子部分中的两个节点中间,可能有一个未着色的节点。 在这种情况下,缺少颜色意味着在检查节是否相等时不考虑节点。

比较执行计划

  1. 使用“文件”菜单打开以前保存的查询执行计划文件(.sqlplan)并选择“打开文件”,或将计划文件拖动到 Management Studio 窗口。 或者,如果刚执行了查询并选择显示其执行计划,请移动到结果窗格中的“执行计划”选项卡中

  2. 右键单击执行计划的空白区域,然后选择“ 比较显示计划”。

    右键单击“比较显示计划”的屏幕截图。

  3. 选择要比较的第二个查询文件。 此时会打开第二个文件,以便比较计划。

  4. 比较的计划打开一个新窗口,默认情况下,顶部有一个,底部有一个。 默认选择是比较计划中常见的运算符或节点的第一个匹配项,但显示计划之间的差异。 所有突出显示的运算符和节点同时存在于两个被比较的计划中。 在顶部或左侧计划中选择突出显示的运算符会自动选择底部或右侧计划中的相应运算符。 选择任何比较计划 SELECT (下图中的节点)中的根节点运算符也会在其他比较计划中选择相应的根节点运算符。

    两个已保存计划文件的计划比较的屏幕截图。

    提示

    可以通过右键单击执行计划的空白区域并选择“切换拆分器方向”,将执行计划比较的显示方式切换为并排显示

    可用于执行计划的所有缩放和导航选项均在计划比较模式下工作。 有关详细信息,请参阅 显示实际执行计划

  5. 在默认选择范围内,右侧还会显示一个双属性窗口。 在比较运算符中存在但存在差异的属性前面是 非等 号(≠),以便于识别。

    “双属性”窗口的屏幕截图。

  6. 底部还会显示“显示计划分析”比较导航窗口。 有三个可用的选项卡:

    1. 在“语句选项”选项卡中,默认选中“突出显示类似运算”,并且比较的计划中突出显示的相同运算符或节点会采用相同的颜色和线条样式。 通过选择石灰模式在比较计划中的相似区域之间导航。 此外,还可通过选择“突出显示不匹配相似段的运算”,突出显示计划中的差异而不是相似之处

      注意

      默认情况下,比较计划时会忽略数据库名称,从而允许比较那些为名称不同但共享相同架构的数据库所捕获的计划。 例如,从数据库 ProdDBTestDB. 可以使用“比较运算符时忽略数据库名称”选项来更改此行为

      显示计划分析窗口的屏幕截图。

    2. 使用多语句比较计划时,“多语句”选项卡非常有用。它可以比较正确的语句对。

      比较计划中多个语句的屏幕截图。

    3. 在“ 方案 ”选项卡中,可以自动分析一些最相关的方面,以查看与比较计划中 基数估计(SQL Server) 差异相关的部分。 对于左窗格中每个列出的运算符,右窗格显示有关 此方案链接的详细信息 ,以及说明该方案的可能原因。

      不同估计行的屏幕截图。

    如果此窗口已关闭,请右键单击比较计划的空白区域,然后选择“ 显示计划比较选项 ”以重新打开。

    计划比较选项的屏幕截图。

比较查询存储中的执行计划

  1. 在查询存储中,确定具有多个执行计划的查询。 有关查询存储方案的详细信息,请参阅查询存储使用方案

  2. 使用 Shift 键和鼠标的组合为同一查询选择两个计划。

    查询存储中选择两个计划的屏幕截图。

  3. 使用“在单独的窗口中比较选定查询的计划”按钮开始计划比较。 这时可使用“比较执行计划”的步骤 4 到 6

    查询存储中比较显示计划的屏幕截图。