经常遇到客户和其他一些Oracle开发与维护人员,问我为啥使用了RAC,没有感受到业务系统有明显的性能提升,有时反而觉得性能有所下降。这种认为RAC一定能够提高性能的想法,有着广泛的“群众基础”。可以说,使用RAC来提高性能是一种存在于广大ORACLE数据库使用者之间的误解。

这里我不想过多于技术上去解答这个问题,而是从下面这个类比来说明这个问题:

这里我们要谈论的是大部分的业务系统类型,事务处理型,也就是OLTP。虽然很多OLTP类型的系统还兼有生成一些报表和统计数据的功能,但那只是一部分小的功能,主要还是事务处理。

大家都去过银行,假设一个银行营业厅有6个业务窗口,来这个营业厅办理业务的客户一般为3至5个人,最多6个人。由于每个人办理业务的时间,是跟他(她)的业务类型有关的,比如取款2分钟,存款2分钟,开户要5分钟等等,不会以窗口数的增多而减少时间。以这个例子来说,6个窗口已经足够了,因为6个窗口数大于同时办理业务的客户数,而一个客户只会在一个窗口办理业务,就算再多的业务处理窗口,也不会对每个客户办理业务有速度上的提升。

现在假设银行的业务有了很大的发呢,银行营业厅里面的客户比较多了,同时来办理业务的常常超过10人,这个时候就是银行营业厅的窗口不够了(资源不足),客户存在了排队,严重影响了客户办理业务的效率。而营业厅由于受面积的限制,不能增加窗口了(对于机器来说,不能扩容了),这个时候银行在附近又开了一个新的营业厅(增加了一个新的结点),那样部分客户分流到了新的营业厅,这样消除了客户的排队,客户又能够高效率地在银行办理业务了。

使用RAC类似于上面提到的银行,如果业务系统能够在单台机器上跑,这个时候由于资源足够,增加新的结点不会带来性能上的提升,而如果随着业务的发展,机器资源受限,不能为更多的用户服务,这个时候增加新的结点,能够使业务系统能够为更多的用户服务。

然而在现实生活中,很多业务系统并没有为RAC进行一些优化,同时RAC的结点之间由于数据同步的代价比较高,因而使用RAC后往往感受到业务系统并没有更快,有时感觉反而更慢。

RAC的作用更体现于高可用性、水平可扩展性,其次才是某些条件下的性能提升(比如针对于某些DSS系统)。

Trackback

4 comments untill now

  1. 很好的比喻!!能否说说平时是怎么判断单机已经到达了“6个人的极限,需要另开银行?”

    [回复]

  2. 我个人认为一个简单的判断是并发用户的增加,到一个程度后系统性能急剧下降,我认为这个时候这个系统已经到极限了。当然这个时候可以优化应用(提高单笔事务的效率)来使系统支撑更多的用户,否则的话就应该增加节点来水平扩展(这里讲的是RAC,所以排除了主机能够继续扩容的情况)。

    [回复]

  3. but if the pressure is in physical I/O ,i seriously doubt another instance will hlep ?

    [回复]

  4. RAC的水平扩展,只能是处理能力的扩展,IO能力不在这上面,如果IO能力已经达到极限,这样的扩展的确是没办法解决上面提到的问题了。

    [回复]

Add your comment now