优化杭州某著名电子商务网站高并发千万级大型数据库经验之- 磁盘I/O性能
2013-04-16 10:26 通用C#系统架构 阅读(6506) 评论(39) 编辑 收藏 举报好久没写博客了,一方面是日常工作繁忙,另外一方面是想更多的时间陪陪家里人,享受春天的美好时光,同时还在写一本《程序员,你伤不起》的一本书要由人民邮电出版社出版;公司有2台超级强大的服务器,其中1台服务器是用来备份容灾用的,防止老的服务器发生硬件故障时整个网站系统崩溃,若那样会给公司带来惨重的经济损失;而且这样超级强大的服务器不是今天订货明天就能送货上门的。
大学刚毕业那会喜欢研究数据库技术,那时候觉得数据处理很重要,而且数据库优化更重要,看了很多数据库性能优化方面的资料,平时设计软件系统时也会多关心一下数据库的性能问题。但是一直没遇到专门做数据库优化的DBA工作,就渐渐的放弃了数据库专业发展道理。
不是每个公司都能有专业的数据库DBA工作岗位,也未必请得起专业的高手DBA,就是请了人家也未必来对吧。因为没那样的好环境人的技能是容易走下坡路的当然也就更容易贬值而不是升值。
其实让别人放心来弄公司的核心数据库,放心让你操作公司的核心主机,都需要有一个信任的过程;一方面是需要信任你的为人,另外一方面也能信任你的技能高超;因为有任何错误的操作可能会导致天大的错误,服务器停止运转1个小时的直接经济损失就是1-2万元。而且还要在那么多客户面前丢人现眼。间接的损失更是不可估量的会影响到网站的形象。
判断数据库的瓶颈需要一个过程,需要知道数据库的瓶颈是出在哪里? CPU? 内存? 网络? 磁盘? 索引?sql语句? 经过1周的分析优化(3个通宵),得出的结论是最核心的数据库瓶颈问题出在磁盘的读写速度已经跟不上网站的数据大并发。
大学刚毕业那会儿也喜欢研究数据库技术,但是当时迷茫,不知道数据库技术能否派上用处,学了是否能找到个好职位、将来能重视到什么程度,其实多年在这方面的关注积累也奠定了1周时间能把服务器的性能提升4-5倍的可能。没有积累是短时间内难突破的。当然也建议平时多看看这方面的书籍、网上的资料。
1:需要用性能监视器,来看看磁盘的性能,这个参数是建议小于2,在实际服务器上这个参数经常会跳到接近100,几乎没低于2个时候,而且是1天24小时都很大,这表明服务器的磁盘I/O已经遇到了瓶颈了。
2:磁盘队列的长度经常是10-100,也比较大,感觉是有性能问题,而且服务器行的E,F盘只当备份用;24小时里,只有半个小时在发挥价值,C,D盘在疯狂的大量数据读写,对磁盘的稳定性寿命都是一个极大的挑战,好再服务器硬盘的质量好否则早就死翘翘了;由于主数据不能有任何闪失,也不能随便转移到其他硬盘上,主数据是做了RIAD5,所以把一些索引文件、临时数据库、日志文件都搬移到了E,F盘上,因为这些数据就是丢失了问题也不大,也没必要恢复,这么修改了一下后,E,F盘也24小时不断的利用上了,而且还减少了主盘的读写压力。
下面的一张图就是我们平时的台式机、这性能配置差距可不是一般的小,看看CPU数、内存数,就知道有多大差距了。这也是我目前以来亲眼见过得最好的3个服务器之一,亲自能管控的最好的2个服务器之一难得能感受驾驭这么强大的服务器快感。
3:把核心数据库又分了几个文件组、每个文件组又加了一些文件;把一些数据库量超过百万级别的表按业务逻辑进行了分区,同时做了一些索引优化等等工作。
4:把多个硬盘都合理利用,每个硬盘都按配置干不同的工作,经过进一步的优化,磁盘的队列下降到10以内,偶尔高峰期会超过这个值,平时访问量压力不大时,磁盘队列降低到了1以内,对主数据库的磁盘寿命、磁盘的压力都有了很大的改善。
经过这次的连续奋战1周多,感觉自己在职业道路上又升华了一次,亲自操刀优化了全球1000强的电子商务网站的核心数据库,感觉到有些小骄傲。下次有机会再参加专业的数据库优化的课程,再深入学习提高一下,也欢迎在杭州的数据库维护管理人员朋友周末、晚上什么的一起喝茶聊天。
我的QQ:252056973
下次有空时,继续把这次优化的经验分享给大家。