- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AgileSharp -浅谈SQL Server 对于内存的管理
简介
理解 SQL Server 对于内存的管理是对于 SQL Server 问题处理和性能调优的基本,本篇文章讲述
SQL Server 对于内存管理的内存原理。
二级存储(secondary storage)
对于计算机来说,存储体系是分层级的。离 CPU 越近的地方速度愉快,但容量越小(如图 1 所示)。
比如:传统的计算机存储体系结构离CPU 由近到远依次是:CPU 内的寄存器,一级缓存,二级缓
存,内存,硬盘。但同时离 CPU 越远的存储系统都会比之前的存储系统大一个数量级。比如硬盘
通常要比同时代的内存大一个数量级。
AgileSharp() 安捷雨希提供性能优化,架构设计咨询,内训,解决方案
AgileSharp -浅谈SQL Server 对于内存的管理
图 1.计算机存储体系
因此对于SQL Server 来说,正常的生产系统所配置的内存通常不能装载所有数据,因此会涉及到
二级存储,也就是磁盘。磁盘作为现代计算机系统中最后的机械存储部件,读取数据需要移动磁头
(具体关于磁盘的原理,可以看我之前写的一篇文章 ),并且由于数据库所访问的数据往往是随机
分布在磁盘的各个位置,因此如果频繁的读取磁盘需要频繁的移动磁头,这个性能将会十分底下。
由计算机体存储体系结构可以知道,计算机对于所有硬盘内数据的操作都需要首先读取到内存,
因此利用好内存的缓冲区而减少对磁盘IO 的访问将会是提升 SQL Server 性能的关键,这也是本
篇文章写作的出发点之一。
SQL Server 引擎,一个自我调整的引擎
由于SQL Server 过去一直面向是中小型企业市场的原因,SQL Server 存储引擎被设计成一个不需
要太多配置就能使用的产品,从而减少了部署成本,但这也是很多人一直诟病的微软开放的配置
过少。而对于 SQL Server 如何使用内存,几乎没有直接可以配置的空间,仅仅开放的配置只有是
否使用 AWE,以及实例占用的最大或最小内存,如图 2 所示。
AgileSharp() 安捷雨希提供性能优化,架构设计咨询,内训,解决方案
AgileSharp -浅谈SQL Server 对于内存的管理
图2.SQL Server 可控控制内存的选项
而对于具体的 SQL Server 如何使用内存,例如分配给执行计划缓存多少,分配给数据buffer 多
少,这些都无法通过配置进行调控。这也是很多其它技术的开发人员对于使用微软技术的开发人
员充满优越感的原因,而在我看来,虽然 SQL Server 提供可控配置的地方很少,但是很多地方都
可以在通晓原理的情况下进行“间接”的配置。这也需要了解一些 Windows 的原理。
SQL Server 是如何使用内存的
SQL Server 存储引擎本身是一个 Windows 下的进程,所以 SQL Server 使用内存和其它 Windows
进程一样,都需要向 Windows 申请内存。从 Windows 申请到内存之后,SQL Server 使用内存粗
略可以分为两部分:缓冲池内存(数据页和空闲页),非缓冲内存(线程,DLL,链接服务器等)。而
缓冲池内存占据了 SQL Server 的大部分内存使用。缓冲池所占内存也就是图2 最大最小内存所设
置的,因此 sqlservr.exe 所占的内存有可能会大于图 2 中所设置的最大内存。
还有一点是,SQL Server 使用内存的特点是:有多少用多少,并且用了以后不释放(除非收到
Windows 内存压力的通知)。比如我所在公司的开发服务器,在几乎没有负载的时候来看内存使用,
如图 3 所示。
AgileSharp() 安捷雨希提供性能优化,架构设计咨询,内训,解决方案
AgileSharp -浅谈SQL Server 对于内存的管理
图3.SQL Server 进程的内存使用
可以看到 CPU 在 0 负载的时候,内存却占据了 13个 G。这其实是在之前的使用SQL Server 向
Windows 申请的内存一直没有释放所致。
具体 SQL Server 能够使用多少内存是由以下几个因素决定的:
1.物理内存的大小
2.所安装 Windows 版本对于内存的限制(比如 windows server 2008 标准版限制最大内存只能使用
32GB)
3.SQL Server 是 32 位或 64 位
4.如图 2 所示配置 SQL Server
文档评论(0)