在SQL Server 2022中使用缓冲池并行扫描提高可扩展性

缓冲池并行扫描是SQL Server 2022中的一个新功能,它改善了SQL Server中几个常见场景的可扩展性,因此,可以显著提高你的数据库工作负载的性能。

--王成辉翻译整理

-- 原帖地址

缓冲池和缓冲池扫描

        缓冲池是SQL Server用来缓存数据的内存区域。在查询中使用之前,所有的页面都必须被复制到缓冲池中,而且在一些操作中需要扫描缓冲池。

        缓冲池扫描是一种常见的内部操作,需要在潜在的数百万个缓冲区中进行迭代。例如,一个拥有1TB缓冲区空间的SQL Server实例需要进行缓冲区池扫描来迭代1.3亿个缓冲区。这对于任何SQL Server环境都是如此,无论其缓冲区空间的使用情况如何,因为缓冲区池扫描总是遍历整个缓冲区描述符阵列,以找到属于特定数据库的任何缓冲区。

        扫描缓冲池的操作,特别是在拥有大量内存的服务器上,将从新的SQL Server 2022缓冲池并行扫描功能中受益最大。

哪些情况会受到影响?

        数据库启动/关闭、创建新数据库、文件删除操作、备份/恢复操作、Always On故障切换事件、DBCC CHECKDB和DBCC检查表、日志恢复操作以及其他内部操作(如检查点)等操作都将从缓冲池并行扫描中受益。

        在SQL Server 2019和以前的版本中,需要扫描缓冲池的操作可能很慢,特别是在大内存机器上,如M系列Azure SQL虚拟机和大型企业内部SQL Server环境。甚至日志恢复操作和可用性组故障切换操作也会受到影响。目前,没有办法在SQL Server 2022年之前消除这个问题,使用DBCC DROPCLEANBUFFERS丢弃缓冲区可能会导致某种程度的性能下降,因为任何后续的查询执行都必须从数据库文件中重新读取数据,增加I/O。

是什么让这些缓冲池的扫描操作显得比预期的要慢?

在SQL Server 2019和早期版本中,扫描缓冲池总是一个串行操作。机器越大,影响越大,而且关于操作的大小也不一定,甚至在创建一个新的空数据库时也能看到这种影响。

这似乎有悖常理,我们在更大的机器上会有这种体验,但这是由于串行扫描过程和SQL Server在缓冲池方面需要处理的更大的内存量。

在SQL Server 2022中,扫描缓冲池的可扩展性有了明显的改善,使客户能够从他们的硬件投资中获得最大的收益。

SQL Server 2022年缓冲池并行扫描的好处

  • 缓冲池扫描是通过利用多个核心来并行化的。
  • 对大内存机器上的小型和大型数据库操作都有好处。
  • 改进增加了缓冲池扫描诊断,通过新的缓冲池扫描事件提高支持性和洞察力。
  • 运行任务关键型OLTP、托管服务提供商和数据仓库环境的客户将见证整体处理速度的最大改进。

在SQL Server 2022中,缓冲池并行扫描功能通过利用多个CPU核心来提高缓冲池扫描操作的性能。运行SQL Server 2022的客户可能会发现,以前由于串行化缓冲池扫描而导致的执行速度较慢,现在可以提高10-30倍。

下面是一个在HPE ProLiant DL580服务器上 "创建新数据库 "的例子,该服务器有2TB内存,其中1.84TB专门用于SQL Server缓冲池。

在SQL Server 2019机器上创建一个新数据库需要17.204秒,而同样的数据库创建脚本在SQL Server 2022上只需要1秒多。

同样,为了模拟同一台服务器上的数据库故障转移,我们采取了一个样本数据库,将其设置为离线,然后将其重新上线。在SQL Server 2019上,这一事件花了3分15秒多。在SQL Server 2022上,同样的事件只用了28秒多。

正如我们所看到的,并行扫描功能通过增加处理能力来更有效地扫描缓冲池,改善了驻留在大内存机器上的数据库维护和SQL Server工作负载的缓冲池扫描性能,因此即使是大机器上的小操作也会显示出好处。

许多客户只需升级到SQL Server 2022,就能看到这种好处,因为该功能是默认启用的。

它是如何工作的?

从功能上讲,缓冲区池的扫描是通过利用多个核心来并行化的。每800万个缓冲区(64GB)将有一个任务,如果缓冲区少于800万个,仍将使用串行扫描。

这是我们非常兴奋的功能之一,同样,你只是会注意到SQL Server现在更快,特别是当应用程序定期扫描1TB或更大内存的大型服务器上的缓冲池时。

所以,客户已经可以开始在他们目前的SQL Server部署中寻找缓慢的缓冲池扫描事件了?

是的,随着最新的累积更新,从SQL Server 2016 SP3开始,长时间的缓冲池扫描将在ERRORLOG中可见。新的诊断程序将提供一个ERRORLOG消息,只要一个缓冲池扫描需要超过10秒才能完成。

当你想验证缓冲池并行扫描功能是否有利于你的环境时,错误日志信息的收集很有帮助。

此外,SQL Server 2022还为扫描开始/完成、捕获错误事件和并行缓冲池事件的Flush Cache操作增加了新的扩展事件。

需要关注的主要事件是buffer_pool_scan_complete事件,当缓冲池扫描完成的时间超过一秒时,该事件被触发。

这个事件包含经过的时间、并行任务、扫描的缓冲区数量、命令和操作。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值