欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性

程序员文章站 2024-03-21 15:10:46
...

一、 内存管理器变化

sqlserver 2005和2008时,8K和大于8K的内存分配严格分开,由两个内存分配管理器分别完成,可能导致buffer pool还有内存,但multi-page部分却不足了。sqlserver 2012的重大改进之一就是——所有内存请求都通过新的内存管理器完成。

 

1)新内存管理器支持分配所有大小

至此,single-page allocator和multi-page allocator都将退出历史舞台。不论内存大小,sqlserver内存管理器使用内存的方式只分为:普通页、锁定页、大内存页三种模型。

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性

2)新内存管理器对某些特定负载进行了优化

3)新内存管理器完全支持NUMA

4)虚拟地址空间管理完全动态,包括32位

5)所有通过内存管理器分配的内存均受max server memory参数控制

6)32位实例不再支持AWE

7)Lock page in memory使用方法大大简化

sqlserver 2012开始,不论版本和处理器类型,只要启动账号有Lock page in memory权限,就可以使用该功能。企业版、商业智能版、标准版无需任何实质和trace flag即可直接使用。

如何看是否启用Lock page in memory?

  • sqlserver错误日志会有相应信息
Using locked pages in the memory manager.
  • sys.dm_os_memory_nodes返回信息

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性

  • dbcc memorystatus命令输出

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性

 

二、 内存相关诊断工具变化

1. 错误日志变化

sqlserver 2012启动时会打印两个非常重要的信息进错误日志,不需要再到处去找。

  • 所有物理内存
  • sqlserver内存管理器使用内存的方式(普通页/锁定页/大内存页)

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性

 

2. DMV和DBCC命令变化

  • single_page和multi_page的列名均变为page_allocations
  • 之前dmv单位不统一(KB,MB,page等),现在统一使用KB
  • 之前很多内存信息在buffer pool部分输出,现在统一到memory manager下

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性

 

三、 max server memory变化

直到sqlserver 2008R2,max server memory只是限制了buffer pool或者single-page最大可用内存数。

它不包含以下部分:

  • multi-page allocation
  • CLR allocation
  • sqlserver内部线程使用的栈
  • 加载在sqlserver内部的模块通过VirtualAlloc或HeapAlloc直接向windows获取的内存(例如扩展存储过程、通过sp_OA创建的OLE对象、linked server provider分配的内存等)

从sqlserver 2012开始,它包含了multi-page和CLR allocation,但注意这依然不是sqlserver使用内存的全部。

它不包含以下部分:

  • sqlserver内部线程使用的栈
  • 加载在sqlserver内部的模块通过VirtualAlloc或HeapAlloc直接向windows获取的内存(例如扩展存储过程、通过sp_OA创建的OLE对象、linked server provider分配的内存等)

 

四、 其他改变

SqlServer 内存篇(六)—— sqlserver 2012内存管理新特性