DOP 效率低下是一个持续的挑战;当前的 DOP 方法效率低下
执行查询的并行度 (DOP) 会极大地影响其性能。每当查询使用并行性时,总会有一个问题是它是否使用了正确数量的并行性。有时,如果并行度太高,可能会导致查询执行效率低下。如果并行度太低,我们可能会错过并行可以提供的一些加速。MAXDOP 用户可以使用设置或提示手动设置查询或服务器的最大并行度。然而,对于用户来说,手动确定和调整每个查询的正确并行度一直是一个挑战。最多,他们会设置MAXDOP特别是当他们注意到问题时——他们通常不会尝试确定工作负载中每个查询的最佳并行度。
Degree of parallelism feedback 功能概述
在SQL Server 2022中,我们引入了一项称为 DOP 反馈的新功能。此功能将查看任何并行查询,并确定它是否可以在比当前使用的并行度更低的情况下执行得更好。例如,如果其他线程有很多等待,也许 16 个线程会比 20 个线程执行得更好。它将测试新的并行度,并决定这是一个很好的更改并保留 16 个线程,或者它将恢复到以前的并行度并返回到 20 个线程。如果新的并行度很好,则此优化将保留在查询存储中,并将适当地应用于查询以供将来执行。

DOP 反馈永远不会增加并行度,充其量,它会恢复到稳定的先前 DOP,并且它会逐步工作,这意味着它不会尝试一次性大幅降低并行度,而是会尝试稍微降低并行度. 然后,如果这很好,它可能会尝试另一个稍微低一些的并行度。如果新的甚至更低的并行度很好,它可能会尝试再次降低到两个并行度,尽管它不会使并行计划变为串行。如果新的、较低的 DOP 不是那么好,我们返回到以前已知的良好 DOP 并将查询保持在该级别。
例子
查询以 32 的并行度编译。这意味着查询将拆分 32 个不同的线程来执行查询。如果 DOP 反馈检测到线程和 CPU 开销之间的等待时间相当长,它会建议一个较低的 DOP——比如 20。在下一次执行时,查询将以 20 的 DOP 执行。如果性能比下一次更好几次处决,20的DOP将被认为是稳定的。然而,DOP 反馈可能会确定仍有太多等待,并进一步尝试 16 的 DOP。同样,使用多次执行来验证反馈。然后,也许,尝试 8 的 DOP。如果在多次执行后 DOP 8 的性能没有更好,那么系统将返回建议 DOP 为 16 作为最近的、稳定的和经过验证的 DOP。
简单的设置和轻松的优化
启用此功能后,所有这些都无需触发查询重新编译,也无需用户操作即可完成。
SQL 22 的 DOP 反馈解决了我们的客户长期面临的挑战:为每个查询找到合适的并行度,而无需手动测试和调整每个查询以获得最佳性能。这是智能查询处理中的少数功能之一,可为客户提供最佳性能和低接触到非接触体验。
原文标题:Intelligent Query Processing: degree of parallelism feedback
原文作者:Kate Smith
原文链接:https://cloudblogs.microsoft.com/sqlserver/2022/10/20/intelligent-query-processing-degree-of-parallelism-feedback/




