2008年12月7日星期日

MySQL海量数据优化

经常见到有人对MySQL处理海量数据(几百万,几千万的数据就不要往海量上面扯了)的能力持怀疑的态度,根据我的经验,MySQL处理单表亿级数据没有任何问题。

数据库最重要的是安全稳定,速度其次。在做任何优化之前,你都必须做好最坏的打算,一定要有备份和应急方案!

要有一个稳定安全的数据库,你必须:
  • 至少要有一个热备
  • UPS
  • 做合适的RAID。RAID0+1,RAID5或者RAID6
如果可以,最好:
  • 使用xfs而不是ext3。哪天reboot后,你发现磁盘检查要半天,还不能停止,哭都来不及
  • 将数据库数据放入盘柜。更安全,访问更快
现在切入正题,开始优化:
  • 使用64位系统。这是老生常谈了,只要谈优化就少不了这个。不仅MySQL的性能有提升,内存也能使用超过4G。
  • 选择合适的引擎。一般来讲,innodb适合写频繁的表,myisam适合读频繁的表。
  • 建立正确的索引。推荐这篇文章。虽然比较老了,但很经典。
  • 优化my.cnf里面的参数。主要关心和buffer有关的参数,innodb_buffer_pool_size之类的
  • 使用memcache。可以把访问频繁,不经常改动的小表放入memcache;程序对数据库的读操作之前最好访问一下memcache。
  • 打开slow_query_log选项。解决出现的慢查询语句。
  • 优化sql语句。
  • 使用SAS而不是SATA。数据库对硬盘要求很高,很多时候,换个快的硬盘就能有立竿见影的效果。
优化不可能一蹴而就,它是一个长期持续的过程,比如一些参数要在长期的运行中观察测试才能得到一个最优的值。

ps:这篇文章不要错过

没有评论: