SQL Server服务器内存升级后的烦恼

SQL Server服务器内存升级后的烦恼,第1张

不久之前 笔者一个在企业中从事网管工作的朋友向我求助关于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

而影响服务器性能的最主要因素就是CPU。无需多言,所有人都清楚处理器对整机性能意味着什么,通常他还决定了所采用的平台和支持的相关技术。 CPU篇 众所周知,各品牌服务器因设计不同,大多数的CPU散热器是不通用的,尤其在高端机型越发明显。本文仅以IBM品牌服务器为例,说说关于服务器配件的三两事。IBM X5550 CPU套件 首先是价格,举例来说,同样一个Xeon E7450(内核数6Core/主频2.4Ghz/前端总线1066MHz/二级缓存L2 9M/三级缓存L3 12M),在我们理解来说都是一样的,因为都是Intel的产品。但因为各品牌服务器设计不同,通常来说CPU套件也是不能通用的。因为CPU和散热器是不拆分销售的,所以选购不同品牌的服务器升级同样的硬件配置,花费是有些不同的。HP X5550 CPU套件 这样在我们升级处理器的时候就遇到了一个很大的问题。我们只能选用服务器厂商的CPU套件。 把这个话题扩展开来的话,还会涉及一些方面。包括各种渠道的散装CPU,加上各种来源的CPU散热器,就能组成出来很多非正规渠道的CPU套件。通常来说CPU的影响不大,毕竟CPU没有什么假的,我们要关心的是散热器。毕竟选用一款正规的散热器是一件很重要的事情。玩家们用的DIY风扇 与DIY玩家不同,服务器的理念是提供7*24的稳定性,这不是什么讲究个性甚至换散热器玩超频的事情。所以才会有不同厂家同样配置服务器之间价格上的巨大差异。当然,这不是说贵的就一定在各方面好,便宜的就一定在各方面不好,只是影响价格的其中一个因素。 CPU散热器 很多服务器的CPU散热器都是特别设计的。讲一个笔者曾经亲历的事情,某单位决定升级一批IBM Blade Center HS21的处理器Xeon E5440。有10台刀片式服务器打算把之前的单路配置升级为两路配置,经过各层转达最后订购到了10套CPU组件。配件型号为44R5634,具体内容是Quad-Core Xeon E5440 2.83GHz 12MB L2 1333MHz 80w 。IBM HS21 CPU套件 有什么问题吗?单看这些参数,大部分对服务器CPU有了解的人可能都不会觉得有问题。可当技术人员拿到这批CPU时候却顿时傻了眼,硕大的处理器散热器根本就无法安装在轻薄的刀片服务器上。机架式服务器CPU套件 正确的选件编号应该是44T1740内容同样是Intel Xeon QC E5440 2.83GHz 12MB L2 Cache 80w。区别就是CPU套件里提供了不同的散热器。而CPU本身是一样的。不同的编号对应的是不同类型的服务器。 欢迎进入服务器论坛讨论 CPU稳压模块IBM CPU稳压模块 还有一种情况,在Nehalem之前,服务器平台的两路和四路扩展通常需要CPU稳压模块(VRM)。以IBM产品为例,当单路服务器升级为多路时候需要添加一个对应CPU型号的稳压模块,这个稳压模块是随原包的CPU套件提供的。而四路的服务器(例如X3850M2)则有对应的4个稳压模块,这也同样是包含在CPU套件里的。而本身为两路的服务器(例如X3500或X3650)在只有一个CPU的时候是不需要稳压模块的,只有在扩展为两路时候才需要添加稳压模块(且只能添加一块)。HP CPU稳压模块这个VRM可是"非行货"多发配件 抛砖引玉,请大家务必在选购升级服务器时候充分了解关于配件的种种问题。 内存篇 大家都知道服务器内存与普通PC机的内存有所区别,一般都带有ECC校验功能。通常情况下我们会选择与服务器品牌相同的内存品牌。但是实际上内存都是由现代,美光,尔必达,三星等厂商为服务器厂商生产的。所以我们一般情况下不用太在意内存颗粒,但是几乎所有的服务器厂商都会建议用户采用自身服务器品牌的内存进行更换升级。不同的内存条 升级时候还有一点不能忽略,除了选择同样频率的内存,既DDR3-1333Mhz,DDR2-667Mhz等。还应注意,服务器内存通常来说是成组购买升级的。既每个内存通道内,尽量要使用相同品牌、相同颗粒、相同频率、相同电压、相同校验技术(chipkill,ecc)、相同型号(udimm rdimm)的内存条。 这点尤其重要,否则服务器可能会报错。 服务器内存与普通内存有什么区别? 内存校验技术 一般来说也就是后面两种区别较大,通常来说服务器内存都带有校验技术,而普通PC机内存是不具备的。相对传统的ECC校验技术,chipkill又是何方神圣呢?“探路者”探测器登陆火星 在十几年前,相传在遥远的火星上出现了名为“探路者”的怪物…… IBM引入大型机的技术为美国航天局(NASA)的"探路者"探测器赴火星探险而研制了Chipkill。它是IBM公司为了弥补目前服务器内存中ECC技术的不足而开发的,是一种新的ECC内存保护技术。 ECC内存技术虽然可以同时检测和纠正单一比特错误,但如果同时检测出两个以上比特的数据错误,则无能为力。但基于Intel处理器架构的服务器的CPU性能以几何级的倍数提高,而硬盘驱动器的性能同期只提高了5倍,因此为了保证正常运行,服务器需要大量的内存来临时保存从CPU上读取的数据。这样大的数据访问量就导致单一内存芯片在每次访问时通常要提供4(32位)或8(64位)字节以上的数据。一次性读取这么多数据,出现多位数据错误的可能性会大大提高,而ECC又不能纠正双比特以上的错误,这样就很可能造成全部比特数据的丢失,系统就会很快崩溃。IBM的Chipkill技术是利用内存的子结构方法来解决这一难题的。 随着技术的发展,这些年已经出现了关于内存更多的保障技术。 热备内存—Sparing热备内存技术 进行内存热备时,做热备份的内存在正常情况下是不使用的,也就是说系统是看不到这部分内存容量的。每个内存通道中有一个DIMM不被使用,预留为热备内存。芯片组中设置有内存校验错误次数的阈值, 即每单位时间发生错误的次数。当工作内存的故障次数达到这个“容错阈值”,系统开始进行双重写动作,一个写入主内存,一个写入热备内存,当系统检测到两个内存数据一致后,热备内存就代替主内存工作,故障内存被禁用,这样就完成了热备内存接替故障内存工作的任务,有效避免了系统由于内存故障而导致数据丢失或系统宕机。这个做热备的内存容量应大于等于所在通道的最大内存条的容量,以满足内存数据迁移的最大容量需求。 内存镜像—Mirroring内存镜像是将内存数据做两个拷贝,分别放在主内存和镜像内存中。系统工作时会向两个内存中同时写入数据,因此使得内存数据有两套完整的备份。由于采用通道间交叉镜像的方式,所以每个通道都有一套完整的内存数据拷贝。 在系统芯片组中设置有 “容错阈值”。如果任意内存达到了“容错阈值”,其所在通道就被标示出来,另一个通道单独工作。但仍然保持双通道的内存带宽。内存镜像技术 内存镜像有效避免了由于内存故障而导致数据丢失。从上图中可看出,镜像内存和主内存互成对角线分布,如果其中一个通道出现故障不能继续工作,另一个通道仍然具有故障通道的内存数据,有效防止了由于内存通道故障导致的数据丢失,极大提升了服务器可靠性。镜像内存的容量要大于等于主内存容量,当系统工作时,镜像内存不会被系统识别。因此在投资方面,做内存镜像数据保护的投资是没有内存保护功能的一倍。 随着芯片组的发展,和内存通道技术的改变,热备内存和内存镜像实现的方式也在做着改变。像上文介绍的方式已经不适用于Nehalem这代产品的三通道内存和四通道内存产品了。而以上的两种方式为了实现更高的可靠性都会给整个系统带来在内存方面较大的花费,以及由此带来的整个内存系统可用数量下降。 关于UDIMM和RDIMM UDIMM(Unbuffered Dual In-Line Memory Modules)无缓冲双信道内存模块。控制器输出来的地址和控制的信号直接到达DIMM的DRAM芯片上。UDIMM的最大配置 不能支持服务器满配内存,也就是说不能达到最高容量。使用UDIMM内存时最大使用每通道只能用2个插槽,但支持3通道,所以只能每边插6条,一共12条内存,不能满配。性能相对会有下降,但是对于预算控制,是个不错的选择。 RDIMM(Registered Dual In-line Memory Module)带寄存器的双信道内存模块。

你需要选择一根服务器用的ECC(带奇偶校验)的DDR内存

选择内存需要注意质保,

你可以选择你的供应商提供的"拆机货",也就是从别的服务器上拆下来的内存

也可以选择新的1G的或者2G的内存(最好要IBM原装的),想便宜话,可以考虑把原来的内存卖掉或者扔掉,换2根一样的KINGSTON的ECC内存

(购买IBM服务器内存时需要注意:内存卡上的编号要和他提供的保修卡上一致,否则IBM不给保修的)

也有一些杂牌的服务器内存,可能价格很低,提供的质保时间也很长(比如3年包修),但是质量就难说了,服务器的内存和硬盘都是24小时工作,不要为一点点价格而损失质量.


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/264557.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存