当应用程序性能出现问题时,服务器硬件通常会背上黑锅,人们想到的往往是如何优化服务器的硬件。实际上恰恰相反,多数情况下,硬件并非导致性能问题的罪魁祸首。对于基于SQL Server的应用程序的性能和升级,服务器硬件所起的影响要远比人们想象的小。
多数应用程序运行缓慢的原因是因为其糟糕的前期设计,而并非硬件性能不够。硬件通常被冠以恶名的原因是,在应用程序运行缓慢之前,性能问题通常不是那么显而易见。而且应用程序的设计不是说改就改的,人们解决性能问题最简单直接的办法就是提高其硬件性能。虽然这种办法也有一定效果,不过它不能真正完全解决问题,这也是为什么人们常常将性能低下归结为硬件问题的原因。虽然硬件有时候确实会导致性能问题,但多数情况下它却不是主要原因。
为了防止你的服务器硬件给SQL Server应用软件拖后腿,首先让我们简单看一下一些常见的硬件选择和调优问题。
选择硬件
为你的SQL Server应用选取最佳硬件要参照很多因素,诸如数据库的规模、用户的数量,数据库被使用的方式(OLTP或OLAP)等等。虽然没有成功的公式来估算服务器硬件需求,最好的办法就是在开发阶段提前开始测试你的应用。尽管许多有经验的DBA可以对你所需要的最佳硬件给出合理的估测,只有通过实际的测试才可确信满足你的应用需要的硬件是什么。
在考察服务器硬件时,需要牢记以下硬件选择方面的事项:
CPU:要购买可以扩展CPU数量的服务器。例如,通过测试结果你认为单CPU服务器就够用,那么你应该购买具备至少两个CPU安装空间的服务器,哪怕现在空着另一个CPU插槽的位置。预留下将来升级扩展的空间。
内存:它可能是对SQL Server的性能影响最大的硬件部分。理想情况下,你的整个数据库应该可以fit into内存。不幸的是,这一般是不可能的。最低要求是,内存的大小应该能够容纳你的数据库中最大表,如果经济上可以接受,为服务器配备其能够支持大小的内存,换句话说,内存多了没坏处。
I/O子系统:它对SQL Server性能的影响仅次于内存,也非常重要。最低要求是,使用硬件RAID系统来运行你的数据库。大概来说,你应该购买多个小硬盘,而不是一个大硬盘。在阵列中的硬盘数量越多,就可以获得更快的I/O。
网络连接:在你的数据库服务器上,至少应该有一个百兆网卡,而且它应该连接到一个交换机上。理想情况下,服务器应该有两块网卡,通过全双工方式连接到交换机。
调优服务器
如果没有正确的配置和优化,最贵的服务器硬件未必具有最好的性能。我曾经遇到过很多硬件相关的性能问题,其多数原因是驱动未正确安装。这些硬件性能相关的问题中很多往往难于跟踪和解决。一般来说,应该让一个有经验的技术高手来确保硬件被正确安装和配置。然后,在该服务器被用于生产环境之前,在一定条件下测试你的应用程序,以发现潜在的性能问题。另外,你的操作系统也必须被正确的配置,这涉及到很多方面,在这儿无法具体介绍。
为了在一个服务器获得最好性能,SQL Server应该独享一台服务器,而不应该同时还安装其它管理工具。不要为了省一点钱而将你的IIS或MTS服务器与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有一定时间来适应你的负载。
通过企业管理器,或者sp_configure存储过程,你可以修改36个SQL Server配置选项。如果你没有调优SQL Server的丰富经验,我不建议你修改任何SQL Server的设置。如果你是一个新手,你所做的修改往往会适得其反,会降低SQL Server的性能。因为一旦修改了SQL Server的设置后,会使其丧失其自我调优的能力。
如果经过深思熟虑后,你仍然认为修改一个或多个SQL Server配置可以提高其在特定环境下的性能,那么你应该稳妥谨慎的来对其进行修改。在你修改设置前,首先应通过诸如性能监视器之类的工具来了解当前SQL Server的性能,以其作为基准。每次只进行一处修改。不要一次进行多个修改,因为这样你无法明确每一个设置带来了性能上的什么变化。
在进行了一处修改后,再次在相同负载下测量SQL Server的性能是否真正有所提高。如果没有,那么恢复到默认设置。如果的确有提高,再继续检查性能在其它负载下是否也会提高。通过后期测试,你或许会发现你的修改在某些负载下可以提高性能,但在其它负载下却会降低性能。这也是为什么我不推荐你修改多数设置的原因之一。
一般来说,如果你的SQL Server应用程序遭遇到了性能相关问题,通过修改SQL Server设置方法解决这些问题的可能性非常小。
【编辑推荐】