一、硬件
如果条件允许,则尽可能使用性能更好的硬件设备。
1、CPU
CPU 的选型原则,一般先看主频的高低,然后考虑二级缓存的大小。
其次,注意 Windows 的电源选项。
2、内存
原则上,内存越多越好。
3、磁盘
磁盘是数据库系统的最大瓶颈。建议优先考虑 spindle ,再考虑 RAID。后文将有详细说明。
4、网卡
网卡选型时往往将带宽作为第一要素。实际上更应该注意到,降低网络延迟不仅仅在于提高带宽,高性能的低延迟网卡有助于提高网络性能。
Intel 是这样解释网络延迟的:
根据Intel发布的案例,纽约证交所数据骨干网使用万兆以太网RDMA技术,可实现每秒18~46微秒的延迟,平均延迟为26微秒。http://ftps.zdnet.com.cn/files/3/21643.pdf
二、Server Core
Server Core(服务器核心)是Windows Server 2008及后续版本提供的功能。它允许在服务器上安装极小的安装选项,从而为特定的服务提供一个可执行的、功能有限的、低维护的服务器环境,能有效地提高安全性和降低管理复杂度。Microsoft表示,Server Core可以实现最大程度的稳定性。关于 Windows Server Core 的安装,请参考《Windows 2008 服务器核心(Server Core)》 http://jimshu.blog.51cto.com/3171847/1091798
为减少GUI 对操作系统和应用程序的影响,提升性能与稳定性,可以考虑将 SQL Server 安装在 Server Core 上。
SQL Server 2012 的新特性之一,就是可以安装在 Server Core上。SQL Server 2012 之前的版本不支持 Server Core(实际上是Windows Server 2008不支持安装.Net Framework)。
三、消除应用软件的影响
一般建议将某台服务器作为专门的数据库服务器,并且尽可能避免在这台服务器上安装其它应用软件。
我在实践中曾经遇到以下3类软件对数据库产生严重影响。
1、防病毒软件
其中一个案例,数据库反应非常慢,感觉像deadlock。最后竟然发生了蓝屏。经过对蓝屏dump文件进行分析,19#处理器当时有12380个work item在等待,而某防病毒软件的进程运行已超过5分钟仍处于pending状态(正常情况下应该是各个进程轮流使用处理器),导致阻塞。最后联系该软件的厂家,得知厂家已经建议不要在服务器上安装运行此进程。
2、第三方的备份软件
其中一个案例,发现SQL Server性能持续下降的原因是内存不足。根据收集到的日志发现此问题的 tag: Ddk,总共 200MB 左右的非分页内存,Ddk 中占用了 167MB。通过命令 findstr /l /m Ddk C:\Windows\system32\drivers\*.sys ,找到 4 个驱动程序。其中一个为第三方的备份软件,停用该软件后恢复正常。
3、第三方的群集软件
由于 Microsoft Cluster Server(MSCS)必须安装在 Windows Server 的 enterprise edition,因此有些客户使用了第三方的群集软件。
其中一个案例,经过监视 Windows 计数器,发现 SQL Server 在访问磁盘时,磁盘I/O的读写速度被锁定在 8KB/s。
四、虚拟化
对于数据库服务器而言,如果将数据库服务器进行虚拟化,应当注意资源(内存、CPU、磁盘I/O、网卡等)的竞争。
其中最重要的是内存。VMware 是这样解释内存的:
根据上图所示,这台虚拟机(也称客户机,Guest)的最大可用内存为 configured,reservation 是保留给这台虚拟机专用的(其中 Touched memory 是指已经被使用的内存)。当物理机的内存已经全部分配完毕,而其它虚拟机还需要更多的动态内存时,这台虚拟机就会释放 reservation 与 configured 之间的那部分动态内存(因此这部分称为 swappable),内存中的数据会被转移到磁盘上的 VM swap file 。
由于 SQL Server 对内存非常敏感,特别是在从VM swap file 将内存数据重新加载到物理内存的时候会导致SQL Server出现短暂的“假死”状态,因此一般建议在虚拟化配置时将虚拟机设定为静态内存管理。
或
本文结语:
服务器的优化措施包括硬件、软件、操作系统、虚拟化各方面的优化。