浅谈sqlserver对于内存的管理

浅谈sqlserver对于内存的管理

ID:46255910

大小:351.48 KB

页数:10页

时间:2019-11-22

浅谈sqlserver对于内存的管理_第1页
浅谈sqlserver对于内存的管理_第2页
浅谈sqlserver对于内存的管理_第3页
浅谈sqlserver对于内存的管理_第4页
浅谈sqlserver对于内存的管理_第5页
资源描述:

《浅谈sqlserver对于内存的管理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、浅谈SQLServer对于内存的管理作者:江西新华电脑学院简介理解SQLServer对于内存的管理是对于SQLServer问题处理和性能调优的慕木,木篇文章讲述SQLServer对于内存管理的内存原理。二级存储(secondarystorage)对于计算机来说,存储体系是分层级的。离CPU越近的地方速度愉快,但容量越小(如图1所示)。比如:传统的计算机存储体系结构离CPU由近到远依次是:CPU内的寄存器,一级缓存,二级缓存,内存,硬盘。但同时离CPU越远的存储系统都会比之前的存储系统人一个数量级。比如硬盘

2、通常要比同时代的内存人•个数量级。图1•计算机存储体系因此对于SQLServer來说,正常的牛产系统所配胆的内存通常不能装载所有数据,因此会涉及到二级存储,也就是磁盘。磁盘作为现代计算机系统中最后的机械存储部件,读取数据需要移动磁头(具体关于磁盘的原理,可以看我Z前写的一篇文章),并FI.由于数据库所访问的数据往往是随机分布在磁盘的各个位置,因此如果频繁的读取磁盘盂要频繁的移动磁头,这个性能将会十分底下。由计算机体存储体系结构可以知道,计算机对于所有硬盘内数据的操作都需要首先读取到内存,因此利用好内存的缓

3、冲区而减少对磁盘10的访问将会是捉升SQLServer性能的关键,这也是本篇文章写作的出发点之一。SQLServer引擎,一个自我调整的引擎由于SQLServer过去一肓•面向是屮小型企业市场的原因,SQLServer存储引擎被设计成一个不需要太多配置就能使用的产站,从而减少了部署成本,但这也是很多人一直诟病的微软开放的配置过少。而对于SQLServer如何使用内存,几乎没有宜接可以配置的空间,仅仅开放的配置只冇是否使用AWE,以及实例占用的最大或最小内存,如图2所示。迭择页"41-Q-***一空_?酸鈕

4、接提级庫处安连教«权Q帮助06奔去内存送I页目棲用ATH分《E内存⑹最小魔务吉内存00)(11)F3量大魔务2!内存伽)00:[21474836473義他内存选顷创健當引占用的内ffo®>0=娅內存)a):1^3甸次童徇占用的II小内»0®)®)[10243连接.CARZYS0I-rcCerty5on割音看谆捲BE性「运行值00aW養值0C)图2.SQLServer可控控制内存的选项而对于具体的SQLServer如何使用内存,例如分配给执行计划缓存多少,分配给数据buffer多少,这些都无法通过配置进行

5、调控。这也是很多其它技术的开发人员对于使用微软技术的开发人员充满优越感的原因,而在我看來,虽然SQLServer供可控配置的地方很少,但是很多地方都可以在通晓原理的時况下进行“间接”的配置。这也需要了解一些Windows的原理。SQLServer是如何使用内存的SQLServer存储引擎木身是一个Windowsb'的进程,所以SQLServer使用内存和其它Windows进程一样,都需耍向Windows中请内存。从Windows申请到内存之麻,SQLServer使用内存粗略可以分为两部分:缓冲池内存(数据

6、页和空闲页),非缓冲内存(线程,DLL,链接服务器等)。而缓冲池内存占据了SQLServer的人部分内存使用。缓冲池所占内存也就是图2最大戢小内存所设置的,因此sqlservr.exe所占的内存有可能会大于图2小所设置的最大内存。还有一点是,SQLServer使用内存的特点是:有多少用多少,并且用了以后不释放(除非收到Windows内存压力的通知)。比如我所在公司的开发服务器,在几乎没冇负载的时候來看内存使用,如图3所示。图3.SQLServer进程的内存使用可以看到CPU在0负载的时候,内存却占据了13

7、个G。这其实是在Z前的使用SQLServer向Windows中请的内存一直没有释放所致。具体SQLServer能够使用多少内存是由以卜•几个因素决定的:1.物理内存的人小2.所安装Windows版木对于内存的限制(比如windowsserver2008标准版限制最人内存只能使用32GB)3.SQLServer是32位或64位4.如图2所示配置SQLServer对于内存的使用量5.SQLServer的版本(比如express版只能用1G内存)SQLServerOS的三层内存分配SQLServerOS对于内存

8、的分配分为三个层级,依赖关系如图4所示。图4.SQLServerOS内存依赖关系MemoryNode首先最底层的是MemoryNode,MemoryNode的作用是使得分配内存山Windows移交到SQLServerOS层面执行。每个SQLServer实例通常都只拥冇一个MemoryNode,MemoryNode的多寡只取决于NUMA构架的硕件配置。我们通过DBCCMEMORYSTATUS可以看到MemoryNode的一些信息

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。