SQL Server 2012 资源调控器增强

SQL*_*ner 6 sql-server-2008 sql-server sql-server-2012

在 SQL Server 2012 中,对通过使用资源调控器控制内存使用进行了哪些具体的增强。直到 SQL Server 2008 R2 资源调控器只能控制与查询内存授予相关的内存

我查看了SQL Server 2012 BOL,但它没有明确说明任何内容。

Aar*_*and 10

这是一个很好的问题,因为那里有很多误导性信息。

对 SQL Server 2012 中资源调控器可以管理的内存的更改与Max Server Memory设置可以管理的内存的更改大致一致。在 SQL Server 2012 之前,这只是缓冲池/单页分配。在 SQL Server 2012 中,这扩展到多页分配。我从SQL Server 2012 中的内存管理器表面积变化中提取了这张图:

在此处输入图片说明

恕我直言,该声明有点过于乐观,但 SQL OS 团队还在SQL Server 2012中的新 SQLOS 功能中声明:

资源调控器管理所有 SQL 内存消耗(缓冲池等特殊情况除外)

当我第一次开始研究这个特性的变化时,我得到的迹象是它可以管理缓冲池和列存储缓存之外的所有内存分配。在 SQL Server 2012 之前,资源调控器只能控制查询授予内存。

当然,SQL Server 2012 中的资源调控器还有其他重要的改进,我想我会为其他因为你的问题标题而来到这里的读者提到这些。您现在可以:

  • 拥有 64 个资源池,而不是之前的 20 个限制
  • 使用真正的 CPU 上限(即使没有争用) - 之前的模型在实现上限之前依赖于并发
  • 实施调度程序/NUMA 节点关联(例如将资源池绑定到特定的 NUMA 节点)

另请注意,内存管理器更改在 32 位与 64 位中的实现方式存在一些差异。一些相关信息在这里