SQL Server 2012内存

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

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

 

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

 

presentation12.jpg 

 

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 ServerMulti-Page分配(这些分配请求大于8KB且需要持续内存)

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

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

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

 

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

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

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

 

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

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

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

 

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

 

-g启动参数

 

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

 

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

 

SQL Server2012开始移除了AWE特性

 

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

 

在内存中锁定页

 

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

 

动态虚拟地址空间管理

 

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

 

SQLCLR在启动时加载

 

在之前版本的SQL ServerCommon 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 ServerBPOOL内和BPOOL外相关的分配,大多数DMV使用single_pages_kbmulti_pages_kb。现在它们一起体现为pages_kb。更多详情请点击这里














本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1789926  ,如需转载请自行联系原作者



相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
4月前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
8天前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
3月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
68 13
|
3月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
3月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
48 6
|
2月前
|
SQL 存储 缓存
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
SQL Server 内存占用较高 - 清除缓存 或 设置内存最大占用值
53 0
|
2月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
232 0
|
3月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
151 1
|
3月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
171 3
|
3月前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
下一篇
无影云桌面