以前一直在MySQL的本家做咨询工作,所以我下面和大家讨论的话题是一个我在工作中经常遇到的问题。
什么时候我们应该升级硬件?什么时候应该修改配置?
作为DBA,老板和公司总是希望我们以最小的投入换来最大的性能(效益)。不过我并没有暗示大家,我接下讨论的话题,会是让各位避免购买硬件。
对于上面的答案很多人肯定会说两者都做,或者只做配置修改。我想我没有给大家出选择题,只是拿出来做任何一个考虑的时候,哪些因素影响着我们。我的回答经常是:
1.使劲优化MySQL服务器和查询语句
先看看别人的例子,或者仔细读一些MySQL的手册吧,这样你可以优化一些非常简单的my.cnf。也许最简单的index提高了几十倍的性能。不要轻易买硬件!
2. 先看看你的硬件整体架构是否平衡?
这个问题比较复杂,需要配合你的系统管理员来做,比较小的公司可能是一个人包了这两个角色。我曾经去过一个沈阳的ISV那边,他们是一个大数据量,并发的使用MySQL。后来随着业务增加,其中三台IBM的P机放数据库的机器负担非常重,后来老板下死令要dba调性能。DBA在尝试了很多种手册上的方法后,均无明显效果。后来在很多次交流以后才得知,他们信息中心还有4台机器跑着Mail服务器,任务量非常轻。在建议他们利用上这些机器可能配置的情况下,性能很快就上去了
3. 没办法,服务器全用上了?
这种情况也非常常见,特别是对于那些服务器24小时都有人访问的web公司,如youtube。如果用一些性能监视工具去监控整个服务器,结果看看一整天的流量和性能图,可能会大跌眼镜,服务并不是每时每刻都非常慢,而是某个特定时间段,排除网络的原因,服务器备份的时候或者DBA下班的时候设置的半夜Cron工作总是对数据库有非常大的压力。
4. 还是买硬件吧,有什么建议?
性能调优有句老话,没有最好只有更好。一个系统的性能出现问题,是各个环节的累计造成的。用微观经济学的说法就是我们要使用边际成本最高的投入。
下面几种情况可以考虑相应的部件升级,经济危机了,整机成本太高而且是在没有必要。
IO读写太多,也许考虑买一条200块的内存?
增加CPU运算,也许考虑买一台x86的服务器,忘记Sun的CMT吧,因为MySQL的限制,使用不了这么多线程,反倒增加负担。