并行度 (DOP) 反馈

适用于: 适用于: SQL Server 2022 (16.x) 及更高版本、Azure SQL 数据库

SQL Server 2022 (16.x) 预览版引入了一项称为并行度 (DOP) 反馈的新功能,此功能根据运行时间和等待时间来标识重复查询的并行度低效,从而提高查询性能。 DOP 反馈是智能查询处理功能系列的一部分,可解决重复查询的并行度使用率欠佳问题。 当并行度过高可能导致性能问题时,此方案有助于优化资源使用情况并提高工作负载的可伸缩性。

DOP 反馈会自行调整 DOP 以避免出现这些问题,而不是对每个查询进行全面的默认或手动调整。

有关其他查询反馈功能,请参阅内存授予反馈基数估算 (CE) 反馈

并行度 (DOP) 反馈可避免过度并行

DOP 反馈会自行调整 DOP 以避免过度并行,而不是对每个查询进行全面的默认或手动调整。 如果认为并行度使用率效率低下,DOP 反馈会降低下一次执行查询的 DOP,无论配置的 DOP 是什么,并验证它是否有帮助。

并行度通常有利于报告和分析查询或者处理大量数据的查询。 相反,当协调所有线程所花费的时间足以抵消掉使用并行计划的优势时,并行执行的以 OLTP 为中心的查询可能会出现性能问题。 有关详细信息,请参阅并行计划执行

  • 若要启用 DOP 反馈,请在数据库中启用 DOP_FEEDBACK 数据库范围的配置。 例如,在用户数据库中执行:

    ALTER DATABASE SCOPED CONFIGURATION SET DOP_FEEDBACK = ON;
    
  • 若要在数据库级别禁用 DOP 反馈,请使用 DOP_FEEDBACK 数据库范围的配置。 例如,在用户数据库中执行:

    ALTER DATABASE SCOPED CONFIGURATION SET DOP_FEEDBACK = OFF;
    
  • 若要在查询级别禁用 DOP 反馈,请使用 DISABLE_DOP_FEEDBACK 查询提示。

必须为每个使用 DOP 反馈且处于“读写”状态的数据库启用查询存储。 当我们获得稳定的并行度反馈值时,反馈将保留在 sys.query_store_plan_feedback 目录视图中。

DOP 反馈可用于在数据库兼容性级别 160(随 SQL Server 2022 (16.x) 引入)或更高级别中执行的查询。

仅保留经过验证的反馈。 如果调整后的 DOP 导致性能回归,DOP 反馈将返回到最后一个已知的良好 DOP。 在这种情况下,用户取消的查询也被视为回归。 DOP 反馈不会重新编译计划。

在重新编译计划后,会重新验证稳定反馈,并且可能会向上或向下重新调整这些反馈,但永远不会高于 MAXDOP 设置(包括 MAXDOP 提示)。

从 SQL Server 2022 (16.x) 开始,当启用次要副本的查询存储时,DOP 反馈对可用性组中的次要副本也是副本感知的。 DOP 反馈可以在主要副本和次要副本上以不同的方式应用反馈。 但是,DOP 反馈不会保留在次要副本上,在故障转移时,来自旧的主要副本的 DOP 反馈不会应用于新的主要副本。 故障转移时,应用于主要副本或次要副本的反馈将会丢失。 有关详细信息,请参阅次要副本的查询存储

并行度 (DOP) 反馈实现

并行度 (DOP) 反馈根据运行时间和等待时间来识别重复查询的并行低效率。 如果认为并行度使用率效率低下,DOP 反馈将降低下一次执行查询的 DOP,无论配置的 DOP 是什么,并验证它是否有帮助。

为了评估查询资格,会通过几次执行来测量调整后的查询运行时间。 通过忽略并行查询执行外部的缓冲区闩锁、缓冲器 IO 和网络 IO 等待时间来调整每个查询的总运行时间。 DOP 反馈功能的目标是提高整体并发度并显著缩短等待时间,即使查询运行时间略有增加。

仅保留经过验证的反馈。 如果调整后的 DOP 导致性能回归,DOP 反馈将返回到最后一个已知的良好 DOP。 在这种情况下,用户取消的查询也被视为回归。

注意

DOP 反馈不会重新编译计划。

并行度 (DOP) 反馈注意事项

对于任何通过 DOP 反馈调整的查询,最小 DOP 为 2。 串行执行不在 DOP 反馈的范围内。

可以使用 sys.query_store_plan_feedback 目录视图跟踪反馈信息。

如果查询具有通过查询存储强制执行的查询计划,则 DOP 反馈仍可用于该查询。

目前,DOP 反馈与查询提示不兼容。 有关详细信息,请参阅提示 (Transact-SQL) - 查询查询存储提示

并行度 (DOP) 反馈的扩展事件

以下 XE 可用于并行度 (DOP) 反馈:

  • dop_feedback_eligible_query:当查询计划符合 DOP 反馈条件时发生。 如果发生重新编译或 SQL Server 实例重启,可能会触发其他事件。
  • dop_feedback_provided:当 DOP 反馈为给定查询提供了数据时发生。 此事件在首次提供反馈时包含基线统计信息,在提供后续反馈时包含以前的反馈统计信息。
  • dop_feedback_validation:针对基线或以前的反馈统计信息进行查询运行时统计信息验证时发生。
  • dop_feedback_stabilized:针对查询稳定执行 DOP 反馈时发生。
  • dop_feedback_reverted:还原 DOP 反馈时发生。 反馈验证在提供首次反馈后失败时,会触发该事件。 系统将恢复为无反馈状态。
  • dop_feedback_analysis_stopped:针对查询停止 DOP 反馈分析时发生。

并行度 (DOP) 反馈的持久性

适用于: 适用于: SQL Server 2022 (16.x) 及更高版本、Azure SQL 数据库

如果 DOP 反馈机制发现新并行度良好,此优化将保留在查询存储中,并会适当地应用于将来执行的查询。

此功能是在 SQL Server 2022 (16.x) 中引入的,可用于在数据库兼容性级别 160 或更高版本或 160 及更高版本的 QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_n 提示中运行的查询,并且当数据库已启用查询存储并处于“read write”状态时。