首页 > 数据库 >SQL Server 2022 新特性 - 内存授予反馈:持久性和百分比授予

SQL Server 2022 新特性 - 内存授予反馈:持久性和百分比授予

时间:2023-03-19 18:32:26浏览次数:45  
标签:反馈 Server 授予 内存 2022 SQL 授权

内存授予反馈 (MGF) 是 SQL Server 中的一项现有功能,SQL Server 2022中提供了两项重要改进:反馈持久性和百分比授予反馈。这两个功能增强了内存授予反馈的好处,因为它已经存在于 SQL Server 中——允许减少对适当授予的重新学习,并防止波动的授予要求阻碍内存授予反馈的好处。

内存授予反馈

此现有功能旨在通过记住先前执行查询的内存使用情况并根据先前数据调整授权来防止查询的代价高昂的溢出或浪费的内存分配。这有助于防止因低估而溢出,并通过将过大的内存授予修剪为更适合查询的大小来增加工作负载的吞吐量。

内存授予持久性

在 SQL Server 的早期版本中,内存授予反馈数据仅存储在查询计划缓存中。因此,无论何时计划从缓存中删除,或者在故障转移/服务器重新启动的情况下,系统都必须从头开始重新学习内存授予反馈。在查询存储中存储相关信息似乎是谨慎的。这样就可以随时从磁盘中检索它,而无需担心缓存逐出或服务器重新启动后的性能下降。由于SQL Server 2022 中默认启用查询存储,因此此功能对于提高内存授予反馈的整体有效性是一个明显的胜利。

百分比授予反馈

在 SQL Server 2022 之前,内存授予反馈仅根据查询的最近一次执行确定当前授予调整。然而,在某些情况下——尤其是那些有一个存储过程的缓存计划的情况,其中不同的参数导致结果集大小大不相同(因此内存需求大不相同)——这可能会触发一个严重的交替请求大小的反模式和总是错误的内存授予调整。此模式如下图所示:

SQL Server 2022 新特性 - 内存授予反馈:持久性和百分比授予_微软

在此示例中,第一个查询执行需要 800MB,并给定 800MB。在第二次执行时,查询只需要 5MB,但给定了 800MB。MGF 将意识到这是一个巨大的过度授权,并将随后的执行授权调整为 5MB——但我们又回到了需要 800MB 的原始参数!当 MGF 只查看单个先前的执行时,可能会出现这种不良模式。在 SQL Server 2022 之前,MGF 会检测到这种情况并自行禁用——注意到它无助于改善工作负载。 

SQL Server 2022 引入了百分位授权 - 一种查看不仅仅是单个先前执行查询的方法。通过百分位授予,我们可以回顾执行历史并根据更大的数据点集调整内存授予。我们总是错误地提供更多内存以避免溢出,因为溢出对客户的影响通常比超大授权对吞吐量的影响要大得多。因此,在这个参数敏感的场景中,我们最终可能会得到一个看起来更像下面的授权和执行模式:

SQL Server 2022 新特性 - 内存授予反馈:持久性和百分比授予_sql server_02

在此示例中,您可以看到第一次执行需要非常低的内存授权,但第二次执行需要更高的授权,由于第一次执行而没有提供。第三次执行需要较小的授权量,但百分位授权(蓝线)给它的授权高于最后一次所需的授权,而我们之前的算法(橙色线)将只授权前一次执行所需的数量。随着时间的推移,蓝线会将自身微调到查询所需的内存授权的上限,而先前的授权算法发现自己与所需的授权不同步。 

综上所述,这两个对内存授予反馈的要求使该功能更可靠、更健壮。通过持久化反馈,它对故障转移、重启和缓存驱逐变得健壮。通过使用新的百分比授权算法,我们能够更有效地响应具有广泛波动的授权要求的查询——即使在病态的糟糕情况下,该功能也能继续为客户带来好处。内存授予反馈的这两项改进只是 SQL Server 2022 中众多智能查询处理改进中的一项。


标签:反馈,Server,授予,内存,2022,SQL,授权
From: https://blog.51cto.com/lihuansong/6131310

相关文章