不久之前笔者一个在企业中从事网管工作的朋友向我求助关于SQL Server服务器内存升级后遇到的问题原来他们企业准备上一个企业邮箱系统为了节省开支他们准备在原来的SQL Server服务器上部署企业的邮箱服务器为了提高这个服务器的性能让其能够承担其两种应用服务的重任所以他们对内存进行了升级从原先的G升级到了G
但是内存升级完以后邮箱应用服务的性能不但没有改善而且还有恶化的趋势运行一段时间后这台服务器上运行的邮箱系统就出现了异常情况时不时的会报出内存分配不足的情况一开始他们还以为是邮箱服务器跟SQL Server服务器不兼容故还请了邮箱服务器的技术人员前来查看经过他们的检查发现是SQL Server服务占用的大部分内存所导致的SQL Server服务所需要的内存从升级之前的M左右一下子到了个G难怪邮箱应用服务要警报说内存不够了
一原因分析
笔者对这种问题已经是见怪不怪了已经遇到过好几次类似的故障在SQL Server数据库启动的时候数据库系统会根据物理内存的大小来动态的增大或者缩小高速缓沖区的容量这主要是为了提高SQL Server服务器的性能才如此的设计的
我们知道一般情况下高速缓沖区越大则SQL Server服务器的性能越好这主要是因为有些用户查询过的数据都可以放在高速缓沖区(即内存的其中一部分)中如此的话当用户下次再次需要这些数据的时候就不用到硬盘中去读取而直接在内存中读取即可而从内存中读取数据要比在硬盘中读取速度要快的多
所以只要当服务器的可用内存在MB与MB之间的话数据库系统就会把它的高速缓沖区不断的扩大如此的话当邮箱服务器突然需要用到比较大的内存如对邮箱进行备份或者有用户群发邮件的时候就会报错说内存分配不足
故一般只是内存升级往往不能够解决SQL Server服务与其他应用服务抢占内存的情况为了让SQL Server能够与其他应用服务友好的共处数据库管理员还需要对内存进行合理的分配限制SQL Server数据库服务内存的占用率
二解决方法
针对他们企业的这种情况笔者给出两个建议一是合理地给SQL Server数据库分配内存而是不要把SQL Server服务跟其他应用服务放在同一台服务器上毕竟数据库服务的并发行访问比较多对服务器的性能要求比较高
若果企业选择第一种应对措施的话就需要限制SQL Server服务器的内存使用率为了使得运行在同一台服务器的SQL Server服务器与邮箱服务能够达到一个合理的性能能够和平共处就需要采取一定的措施限制SQL Server数据库服务的内存使用量在SQL Server服务器中专门提供了一个工具(数据库引擎)可以用来帮助我们干预SQL Server服务器的内存分配
具体的说可以按如下方法进行配置
第一步打开SQL Server企业管理器
在SQL Server数据库中提供了一个图形化界面的企业管理器在这个管理平台上可以对SQL Server的大部分服务进行管理与配置SQL Server数据库服务的内存分配规则当然也不例外可以在这里进行调整
第二步找到我们需要调整的服务器
有些企业可能在网络中部署了多个SQL Server服务器为了管理的方面会在其中一台服务器上的企业管理器中集中进行管理不过这家企业他们只有一个SQL Server服务器在我们需要调整的服务器上右键单击选择属性然后就会弹出一个对话框在对话框中选择内存选项卡在这里就可以对数据库应用服务的内存分配方法进行设置
第三步调整相关的内存参数
在这张选项卡中一般有两个参数分别为最小服务内存与最大服务内存在实际工作中我们往往有两种配置方法
一是配置一个最大最小内存即给SQL Server数据库应用服务设置一个最大的使用内存如此的话在这个最大的范围之后数据库系统会根据实际情况在最大内存范围之内对内存的分配进行调整一般情况下最小内存我们可以不设置只对最大内存进行限制即可这就给数据库一种自主选择的权利可以提高内存的使用效率
二是固定内存分配即把最小服务内存与最大服务内存两个参数设置为相同如此的话不管数据库服务需要多大的内存在服务器启动的时候操作系统都会给其预留这么大的内存其他的应用程序及时内存再怎么不足也不会跨越数据库的内存领地很明显这种方式虽然保证了数据库服务的内存需求但是内存的使用率并不是很高
针对上面两种方法笔者比较倾向与使用第一种配置即只对数据库应用服务的最大内存使用率进行限制只要不超过这个范围则服务器可以自主的进行调解那么这个最大的使用率设置成多少合适呢?这主要要看企业所部属的服务了由于这家企业在同一台服务器上运行了邮箱服务器与数据库服务器可能对硬件的压力比较大因为这两个应用服务都涉及到比较多的并发访问所以即使把硬件升级成了G估计也不能够给数据库服务分配比较多的内存一般来说并发性访问越多则最好能够给其配置比较多的内存
配置完成之后不用重新启动这个规则就会起效不过笔者还是建议把SQL Server服务重新启动一下在可以的情况下把服务器重新启动一下最好如此的话操作系统就会根据这个规则对内存进行重新的调整分配也可以让SQL Server服务器更好的队内存进行合理的安排如可以把SQL Serve可用内存固定在一个连续的区域内以提高数据库的性能
三总结
针对这个内存升级后所产生的烦恼笔者有几句话说
一是硬件升级只是数据库服务器性能提升的一个充分条件而不是必要条件也就是说硬件的升级并不一定会导致服务器性能的提升在硬件升级的同时往往也需要调整相关的配置让硬件升级的优势得到极大的发挥笔者认为有时候服务配置比纯粹的硬件升级更加重要一些经验不足的网络管理人员只知道升级硬件而忽视了服务的调整配置他们这是走进了一个死胡同效果往往不能够达到他们的预期
二是一些并发性比较大的应用服务器最好不要放在同一个服务器上现在企业基于服务器客户端模式的管理软件应用越来越多这种模式一个显着的特点就是并发性访问比较频繁给应用服务器带来了很大的压力在一些性能要求比较高的企业它们把数据库与前台的应用程序服务器都分开放置以求优化服务器的性能而且现在服务器价格已经逐渐能够被企业所接受笔者认为企业没有必要在这方面省钱若多个应用服务并发性访问比较多的情况下则最好考虑把他们部署在不同的服务器上以提高各个应用服务的性能
三是在同一个服务器上部署多个应用服务的话要考虑应用服务的稳定性因为像这家企业在同一个服务器上部署数据库与邮箱服务器笔者并不是很赞同因为邮箱服务器是一个比较容易遭受到攻击的服务器垃圾邮件病毒邮件等等都可能导致服务期运行不正常把邮箱服务放在SQL Server数据库服务旁边会降低数据库服务的稳定性最好还是能够分开部署