SQL Server服务器内存升级后的烦恼
不久之前 笔者一个在企业中从事网管工作的朋友向我求助关于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可用内存固定在一个连续的区域内 以提高数据库的性能
三 总结
针对这个内存升级后所产生的烦恼 笔者有几句话说
一是硬件升级只是数据库服务器性能提升的一个充分条件 而不是必要条件 也就是说 硬件的升级并不一定会导致服务器性能的提升 在硬件升级的同时 往往也需要调整相关的配置 让硬件升级的优势得到极大的发挥 笔者认为 有时候服务配置比纯粹的硬件升级更加重要 一些经验不足的网络管理人员只知道升级硬件 而忽视了服务的调整配置 他们这是走进了一个死胡同 效果往往不能够达到他们的预期
二是一些并发性比较大的应用服务器 最好不要放在同一个服务器上 现在企业基于服务器 客户端模式的管理软件应用越来越多 这种模式一个显著的特点 就是并发性访问比较频繁 给应用服务器带来了很大的压力 在一些性能要求比较高的企业 它们把数据库与前台的应用程序服务器都分开放置 以求优化服务器的性能 而且 现在服务器价格已经逐渐能够被企业所接受 笔者认为 企业没有必要在这方面省钱 若多个应用服务并发性访问比较多的情况下 则最好考虑把他们部署在不同的服务器上 以提高各个应用服务的性能
lishixinzhi/Article/program/SQLServer/201311/22435