数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

大内存SQLServer数据库的加速剂


发布日期:2024年08月10日
 
大内存SQLServer数据库的加速剂

为数据库配置比较大的内存可以有效提高数据库性能因为数据库在运行过程中会在内存中划出一块区域来作为数据缓存通常情况下用户访问数据库时数据先会被读取到这个数据缓存中当下次用户还需要访问这个数据时就会从这个数据缓存中读取因为在数据缓存中读取数据要比在硬盘上读取数据快几百倍所以扩大数据库服务器内存可以有效提高数据库性能特别是操作大型数据库时效果更加明显

但是现在企业中普遍采用的数据库服务器都是位的操作系统而这个位的操作系统却有最大内存的使用限制通常情况下标准的位地址最多可以采用GB的内存若数据库管理员想让数据库系统采用更多的内存来提高数据库的性能则就需要进行额外的配置下面笔者就介绍两种常用的配置方式让SQLServer数据库服务器支持大内存让其成为数据库的加速剂

让数据库应用程序支持GB的内存空间

虽然操作系统支持GB内存可是这并不会全部给数据库等应用程序使用默认情况下位操作系统中将有GB的内存空间是为操作系统所保留的即使没有用完其他应用程序也是不能够染指的而包含SQL Server数据库在内的所有应用程序只能过采用剩余的GB内存空间

但是在实际应用中操作系统往往用不着多大G的内存根据笔者的经验一般只要为操作系统保留G的内存已经足够其使用只要没有病毒等不良因素作怪这个内存不会被完全适用如此的话应用程序可以采用的内存空间就会多达G比原先整整多出一个G来

要实现这个转变其实很简单在Windows操作系统中有一个BOOT启动配置文件为了让数据库服务器支持GB的用户模式进程空间必须在这个配置文件中加入一个/gb的参数然后重新启动操作系统即可这么设置之后应用程序就可以寻址GB的进程地址空间 而为操作系统保留GB的内存空间

有时候这个小小的配置可以在很大程度上提高数据库的性能记得有一次笔者为一家企业优化数据库性能笔者查看了用户的数据库环境之后就建议用户增大数据库服务器的内存G增加到G可是效果并没有很大的改善正当笔者束手无措的时候就想到了改变操作系统与应用程序的内存分配方式为此笔者就更改了BOOT启动配置文件只给操作系统保留G的内存空间重新启动后数据库性能得到了很大的改善

为SQLServer启用更高的内存支持

如果数据库应用程序内存寻址空间达到GB后数据库管理员还不满足的话则就需要通过增加物理内存的方式来提高应用程序的性能若需要服务器操作系统突破其默认GB内存空间的限制支持GB以上的内存空间也不是不可能的只是需要进行额外的配置并且其维护的工作量也比较大

若想要SQLServer数据库支持GB以上的内存寻址空间则往往需要进行如下配置

第一步锁定内存页

默认情况下内存大小与操作系统的虚拟内存之间有一个正比例关系在这里数据库管理员只想增大服务器的物理内存而不想对虚拟内存有什么影响故需要锁定内存页锁定内存页的主要作用就是确定哪些帐户可以使用进程将数据保留在物理内存中从而阻止系统将数据分页到磁盘的虚拟内存中默认情况下这个选项的只为OFF也就是说在必要的时候系统会将数据分页到硬盘的虚拟空间中为了最大程度发挥内存的效用就需要把这个选项开启不过这数据库管理员往往需要寻求系统管理员的帮助因为只有具有系统管理员权限的用户才能够给更改这个选项

第二步启用Awe Enable选项

默认情况下即使服务器操作系统支持GB以上的内存空间可是数据库应用程序并不一定支持为了让SQLServer应用程序也支持这个就必须更改数据库的配置参数也就是说需要将这个选项的值设置为然后重新启动数据库系统这个配置比较简单只需要利用命令sp_configure awe enabled 即可不过在进行这个配置之前需要注意两个细节方面的内容一是数据库用户需要这个操作的权限二是这里有一个BUG即在SQL Server数据库中会有一个错误信息数据库管理员可以忽略这个信息

第三步限制文件系统缓存

若增加的内存给操作系统或者其他应用程序用了那么数据库管理员不是白忙一场吗?为此数据库管理员还需要优化数据库系统内存的使用情况如需要限制系统用于文件缓存的内存量如要这么处理的话只需要简单的三个步骤即可

首先数据库管理员在操作系统中找到控制面板并双击网络连接然后选中本地连接其次双击本地连接在弹出的对话框中找到常规选项卡单击属性选中网络文件与打印机共享并单击属性最后在弹出的对话框中去掉最大化网络应用程序数据吞吐量复选框一路按确认即可这个简单的步骤就可以优化数据库内存的使用率

大内存维护管理几个关键点

在通常情况下往往不需要启用GB以上的内存但是若在服务器上同时启用了其他的应用程序服务如在一台服务器上同时有数据库应用程序邮件应用程序文件服务器等多个应用服务的话则可能原有的GB内存无法满足系统管理员不得不对内存进行升级但是对内存升级之后数据库管理员需要手工对内存的分配进行干预以免SQLServer应用程序占用比较多的内存空间而影响其他应用程序的性能

配置max server memory选项虽然说这个选项并不是必须要修改的但是笔者仍强烈建议数据库管理员要修改这个选项特别是数据库应用程序与其他应用程序共享同一台服务器时因为启动SQLServer对大内存的支持后(将Awe Enabled设置为)而且可用物理内存大于用户模式进程空间则当启动数据库服务器时运行的SQLServer实例将会占用几乎所有的可用内存(不管需不需要使用数据库服务器程序会先锁定这些内存这就叫占着茅坑不拉屎)而这个max server memory选项就是用来配置其最大可以占用的内存数量数据库管理员需要预先估算出一个合理的数值然后进行配置让数据库应用程序与其他应用服务能够共同改善至少不能够对其他应用程序的性呢产生不良影响在比较极端的情况下可以在升级内存之前先关闭数据库应用程序;然后启用其他应用程序服务观测一段时间看看他们所需要用到多少的内存然后升级内存并为其他应用程序至少保留以前所需要的内存空间否则的话就会对其他应用程序产生不良影响牺牲其他应用程序的性能来提高数据库的性能这是拆西墙补东墙的做法不值得取

多个SQLServer实例内存如何分配往往在一个SQLServer数据库中会配置多个数据库实例一个数据库实例用来负责ERP系统的运行另外一个则是给CRM系统使用在同一个数据库系统中有多个数据库实例此时该如何在各个实例之间分配可用的内存呢?这基于操作系统的不同又有所不同如果数据库操作系统采用的是系列的则需要为每个数据库实例配置max server memory选项否则的话其中某一个数据库实例就有可能锁定全部的可用内存这主要是因为系列的服务器系统并不支持动态分配大内存所以需要为每个数据库实例配置这个选项但是若数据库服务器采用的是系列的服务器操作系统则不需要进行手工的配置这些参数因为操作系统会动态地分配内存也就是说操作系统会按照总体系统要求平衡SQLServer各个实例之间内存的使用不过为了提高数据库整体性能最好还是为各个实例配置max server memory;而不让操作系统来搞平衡

上一篇:数据库规范化与优化问题讲解

下一篇:DDJ访谈:数据库未来的方向