硬件环境对系统性能的影响
在本章之前的所有部分都是介绍的整个系统中的软件环境对系统性能的影响,这一节我们将从系统
硬件环境来分析对数据库系统的影响,并从数据库服务器主机的角度来做一些针对性的优化建议。
任何一个系统的硬件环境都会对起性能起到非常关键的作用,这一点我想每一位读者朋友都是非常
清楚的。而数据库应用系统环境中,由于数据库自身的特点和在系统中的角色决定了他在整个系统中是
最难以扩展的部分。所以在大多数环境下,数据库服务器主机(或者主机集群)的性能在很大程度上决
定了整个应用系统的性能。
既然我们的数据库主机资源如此重要,肯定很多读者朋友会希望知道,数据库服务器主机的各部分
硬件到底谁最重要,各部分对整体性能的影响各自所占的比例是多少,以便能够根据这些比例选取合适
的主机机型作为数据库主机。但是我只能很遗憾的告诉大家,没有任何一个定律或者法则可以很准确的
给出这个答案。
当然,大家也不必太沮丧。虽然没有哪个法则可以准确的知道我们到底该如何选配一个主机的各部
分硬件,但是根据应用类型的不同,总体上还是有一个可以大致遵循的原则可以参考的。
首先,数据库主机是存取数据的地方,那么其IO 操作自然不会少,所以数据库主机的IO 性能肯定是
需要最优先考虑的一个因素,这一点不管是什么类型的数据库应用都是适用的。不过,这里的 IO 性能并
不仅仅只是指物理的磁盘 IO,而是主机的整体 IO 性能,是主机整个 IO 系统的总体 IO 性能。而 IO 性能
本身又可以分为两类,一类是每秒可提供的IO 访问次数,也就是我们常说的IOPS 数量,还有一种就是每
秒的 IO 总流量,也就是我们常说的 IO 吞吐量。在主机中决定 IO 性能部件主要由磁盘和内存所决定,当
然也包括各种与 IO 相关的板卡。
其次,由于数据库主机和普通的应用程序服务器相比,资源要相对集中很多,单台主机上所需要进 行的计算量自然也就比较多,所以数据库主机的 CPU 处理能力也不能忽视。
最后,由于数据库负责数据的存储,与各应用程序的交互中传递的数据量比其他各类服务器都要
多,所以数据库主机的网络设备的性能也可能会成为系统的瓶颈。
由于上面这三类部件是影响数据库主机性能的最主要因素,其他部件成为性能瓶颈的几率要小很
多,所以后面我们通过对各种类型的应用做一个简单的分析,再针对性的给出这三类部件的基本选型建
议。
1、典型 OLTP 应用系统
对于各种数据库系统环境中大家最常见的 OLTP 系统,其特点是并发量大,整体数据量比较多,但每
次访问的数据比较少,且访问的数据比较离散,活跃数据占总体数据的比例不是太大。对于这类系统的
数据库实际上是最难维护,最难以优化的,对主机整体性能要求也是最高的。因为他不仅访问量很高,
数据量也不小。
针对上面的这些特点和分析,我们可以对 OLTP 的得出一个大致的方向。
虽然系统总体数据量较大,但是系统活跃数据在数据总量中所占的比例不大,那么我们可以通过扩
大内存容量来尽可能多的将活跃数据 cache 到内存中;
虽然IO 访问非常频繁,但是每次访问的数据量较少且很离散,那么我们对磁盘存储的要求是IOPS表
现要很好,吞吐量是次要因素;
并发量很高,CPU 每秒所要处理的请求自然也就很多,所以 CPU 处理能力需要比较强劲;
虽然与客户端的每次交互的数据量并不是特别大,但是网络交互非常频繁,所以主机与客户端交互
的网络设备对流量能力也要求不能太弱。
2、典型 OLAP 应用系统
用于数据分析的 OLAP 系统的主要特点就是数据量非常大,并发访问不多,但每次访问所需要检索的
数据量都比较多,而且数据访问相对较为集中,没有太明显的活跃数据概念。
基于 OLAP 系统的各种特点和相应的分析,针对 OLAP 系统硬件优化的大致策略如下:
数据量非常大,所以磁盘存储系统的单位容量需要尽量大一些;
单次访问数据量较大,而且访问数据比较集中,那么对 IO 系统的性能要求是需要有尽可能大的每秒
IO 吞吐量,所以应该选用每秒吞吐量尽可能大的磁盘;
虽然 IO 性能要求也比较高,但是并发请求较少,所以 CPU 处理能力较难成为性能瓶颈,所以 CPU 处
理能力没有太苛刻的要求;
虽然每次请求的访问量很大,但是执行过程中的数据大都不会返回给客户端,最终返回给客户端的
数据量都较小,所以和客户端交互的网络设备要求并不是太高;
此外,由于OLAP系统由于其每次运算过程较长,可以很好的并行化,所以一般的OLAP 系统都是由多
台主机构成的一个集群,而集群中主机与主机之间的数据交互量一般来说都是非常大的,所以在集群中
主机之间的网络设备要求很高。
3、除了以上两个典型应用之外
还有一类比较特殊的应用系统,他们的数据量不是特别大,但是访问请求及其频繁,而且大部分是读请求。可能每秒需要提供上万甚至几万次请求,每次请求都非常简单,可能大部分都只有一条或者几条比较小的记录返回,就比如基于数据库的 DNS 服务就是这样类型的 服务。
虽然数据量小,但是访问极其频繁,所以可以通过较大的内存来 cache 住大部分的数据,这能够保
证非常高的命中率,磁盘 IO 量比较小,所以磁盘也不需要特别高性能的;
并发请求非常频繁,比需要较强的 CPU 处理能力才能处理;
虽然应用与数据库交互量非常大,但是每次交互数据较少,总体流量虽然也会较大,但是一般来说
普通的千兆网卡已经足够了。
在很多人看来,性能的根本决定因素是硬件性能的好坏。但实际上,硬件性能只能在某些阶段对系
统性能产生根本性影响。当我们的 CPU 处理能力足够的多,IO 系统的处理能力足够强的时候,如果我们
的应用架构和业务实现不够优化,一个本来很简单的实现非得绕很多个弯子来回交互多次,那再强的硬
件也没有用,因为来回的交互总是需要消耗时间。尤其是有些业务逻辑设计不是特别合理的应用,数据
库 Schema 设计的不够合理,一个任务在系统中又被分拆成很多个步骤,每个步骤都使用了非常复杂的
Query 语句。笔者曾经就遇到过这样一个系统,该系统是购买的某知名厂商的一个项目管理软件。该系统
最初运行在一台 Dell2950 的 PC Server 上面,使用者一直抱怨系统响应很慢,但我从服务器上面的状态
来看系统并繁忙(系统并发不是太大)。后来使用者强烈要求通过更换硬件设施来提升系统性能,虽然
我一直反对,但最后在管理层的要求下,更换成了一台 Sun 的 S880 小型机,主机 CPU 的处理能力至少是原来机器的 3 倍以上,存储系统也从原来使用本地磁盘换成使用 EMC 的中断存储 CX300。可在试用阶段,发现系统整体性能没有任何的提升,最终还是取消了更换硬件的计划。
所以,在应用系统的硬件配置方面,我们应该要以一个理性的眼光来看待,只有合适的才是最好
的。并不是说硬件资源越好,系统性能就一定会越好。而且,硬件系统本身总是有一个扩展极限的,如
果我们一味的希望通过升级硬件性能来解决系统的性能问题,那么总有一天将会遇到无法逾越的瓶颈。
到那时候,就算有再多的钱去砸也无济于事了。