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

142 篇文章 25 订阅
22 篇文章 0 订阅

一、 内存管理器变化

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

 

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

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

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返回信息

  • dbcc memorystatus命令输出

 

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

1. 错误日志变化

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

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

 

2. DMV和DBCC命令变化

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

 

三、 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分配的内存等)

 

四、 其他改变

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值