千家信息网

SQL Server 2012内存

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,SQLServer 2012内存翻译自:https://mssqlwiki.com/tag/sql-server-2012-memory-architecture/SQL Server 2012与之前
千家信息网最后更新 2026年11月02日SQL Server 2012内存

SQLServer 2012内存

翻译自:https://mssqlwiki.com/tag/sql-server-2012-memory-architecture/

SQL Server 2012与之前的版本相比,内存管理器在有效的方式管理SQL Server内存消耗上做出了很多改变。每个DBA应该知道的SQL Server 2012内存的重要改变已经在这篇博文中文档化了。如果你不熟悉之前版本的SQL Server内存架构,在你继续了解Denali内存管理器的改变之前,我推荐你阅读这篇文章。

MaxServer Memory

在之前版本的SQL Server里,"Max Server Memory"控制了Single page allocator(BPOOL)可以在SQL Server中消耗的用户地址空间的最大物理内存。

只有Single page allocator时候BPOOL的一部分,Max server memory只控制BPOOL,因此,以下分配来自BPOOL(Max server memory)之外。

  1. 来自SQL Server的Multi-Page分配(这些分配请求大于8KB且需要持续内存)

  2. CLR分配(这些包含SQLCLR堆和在启动期间创建的全局分配)

  3. SQL Server进程里用于threadstacks的内存使用(Max worker threads * thread stack size)。Thread stack size在32位SQL Server里是512K,在WOW是904K,在64位是2MB

  4. 通过Non-SQL Server dll产生的直接Windows分配(这些包含Windows堆使用和通过模块加载到SQL Server进程里的直接虚拟分配。例如:来自扩展存储过程DLL的分配,使用OLE自动化过程(sp_OA调用)的对象创建,加载到SQL Server进程里的链接服务器提供者的分配)

SQL Server 2012内存管理器现在已经结合了singlepage allocator和multipage allocator作为any-size page allocator。结果,any-size paeallocator现在管理分配,而在过去归类为single page和Multi-page分配。

  1. "Max server memory"现在控制和包含"Multi pages allocations"。

  2. 之前版本SQL Server CLR分配内存在BPOOL(Max server memory)之外。SQL Server 2012包含在"Max server memory"里包含SQL CLR分配的内存。

SQL Server 2012"Max servermemory"配置不只包含以下分配:

  1. SQL Server进程里对于threadstacks的内存分配。

  2. 直接对于Windows的内存分配请求(例如:来自于加载到SQL Server进程的第三方DLL的分配(Heap,Virtualalloc调用),使用OLE自动化过程(sp_OA)等的对象创建)。

这些改变允许DBA根据内存需要和使用资源调节器更加准确的配置和控制SQL Server。

-g启动参数

我们使用-g启动选项修改在SQL Server用户地址空间称为"Memory-To-Reserve"的一个区域的默认值。这个区域也被为"Memory-To-Leave"或MTL。这个"Memory-To-Reserve"或-g配置选项只与32位SQL Server实例相关。

在之前的SQL Server版本里,直到SQL Server 2008 R2,Multi pages allocation和CLR是Memory-To-Reserve (-g)的一部分,从Denali开始它们是BPOOL的一部分(被Max server memory控制),因此,如果你在之前的版本设置它为multipage allocator或CLR分配更多空间,而现在迁移到Denali,你需要移除-g。

从SQL Server2012开始移除了AWE特性

AWE特性在之前32位版本的SQLServer中用于寻址大于4GB内存。该特性现在从Denali中移除了。参考:"AWE弃用"。因此如果你需要更多内存,那么你需要迁移到64位SQL Server。

在内存中锁定页

跟踪标志845不再需要在内存中锁定页。只要SQL Server启动账号有"Lock pages in memory"权限,数据中心版、企业版、标准版和商业智能版对于在BPOOL中分配内存将使用AWE分配器API,该分配将会被锁定。

动态虚拟地址空间管理

在之前版本的32位SQL Server里,我们在启动时预留了Bpool,剩下的地址空间用于MTL(Memory to reserve或Memory to leave)。在Denali虚拟地址空间管理是动态的(我们不在启动时预留),因此,对于第三方组件相比使用-g参数配置,可以使用更多内存。

SQLCLR在启动时加载

在之前版本的SQL Server,Common language runtime(CLR)功能当第一个SQL CLR过程或函数被调用的时候在SQLServer进程内初始化。SQL Server 2012在启动时执行SQL CLR初始化。该初始化不依赖于"clr enabled"配置选项。

你会注意到在服务启动期间SQL Server错误日志里的如下信息:

2012-10-18 15:23:13.250spid8s Starting up database 'master'.

2012-10-18 15:23:13.930Server CLR version v4.0.30319 loaded.

总的物理内存和内存模块使用

在服务器上总的物理可用内存和内存模块使用记录在SQL Server错误日志。

2012-10-18 15:23:06.690Server Detected 131067 MB of RAM. This isan informational message; no user action is required.

2012-10-18 15:23:06.700Server Using locked pages in the memorymanager

2012-10-22 15:32:20.450Server Detected 131067 MB of RAM. This isan informational message; no user action is required.
2012-10-22 15:32:20.450 Server Using conventional memory in the memory manager.

DMV和性能计数器改变

在之前的SQL Server版本里,与SQL Server在BPOOL内和BPOOL外相关的分配,大多数DMV使用single_pages_kb和multi_pages_kb。现在它们一起体现为pages_kb。更多详情请点击这里。



内存 分配 版本 管理 空间 进程 地址 控制 配置 更多 过程 模块 物理 特性 服务 动态 区域 参数 对象 日志 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技巨头监管 互联网科技公司的优势 金诺互联网科技 期待互联网科技 善班互联网科技 碳银互联网科技有限公司 长亮科技 互联网金融 海南科技产业互联网平台 科技与互联网的利与弊 隆华科技工业互联网 现代互联网科技股 互联网科技公司实习生 阿大互联网科技有限公司 崇明区互联网教育科技售后服务 怎样加入科技互联网 银川新华互联网科技学校原画 求路客互联网科技电话 互联网科技博主张洲 陕西彩京云互联网科技有限公司 互联网大会出现的黑科技 互联网科技工作委员会 以房互联网科技 银优互联网科技有限公司 滨湖区互联网智能科技产品供应 济南和联互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 领航科技大厦互联网公司 第三届互联网大会安防黑科技 盐城市攀科互联网科技有限公司 山东蛋芒互联网科技有限公司
0