一、硬件优化





1.服务器的硬件选择:



CPU:对于mysql来说,多CPU的并行查询支持的并不好,因为单个查询只会用到1个CPU。因此,用更快的CPU,往往比更多的CPU性能来的要好一点。更多的CPU Cache也会对查询有所帮助。多CPU能用到的就是在线事物处理,但往往这件事,也需要更快的CPU来处理。





内存:更大更快速的内存,通常比小内存的帮助更大。而且,如果用到Heap或者Memory引擎的话,内存会消耗更多。





硬盘:高转速的比低转速的要好,2.5寸盘比3.5寸盘更好,磁头摆动范围要小于3.5寸盘,硬盘的cache也是需要考量的问题之一。SSD要远远优于普通金属盘,但价格昂贵,属于终极解决方案。并且,使用顺序IO,不要用随机IO。





Raid:



raid0虽然快,但是基于数据安全考量,不能作为推荐配置。



raid1比较安全,读取速度也要稍高于raid0,但写入速度较慢。高写入的负载不推荐。特别是作为主写入的master来说。



raid5对于安全性和速度是一个比较平衡的点,但如果你的数据量很大,不推荐用5,raid5对10块盘以上的硬件支持不是很好。



raid10是不错的选择,速度和安全都有保障,只是一块硬盘如果发生损坏,虽然不会造成数据丢失,但会严重影响性能。



raid50是比较好的选择,适合于极大量的数据,并且保持了不错的数据安全和性能稳定。







二、软件优化





1.系统优化,这个需要跟你自己的操作系统来做,windows有windows的优化方法,Unix有Unix的优化方法,不反对windows+mysql的系统环境,但更推荐Unix+mysql。这基于诸如安全性,稳定性等等方面的考虑。操作系统优先考虑稳定性,而不是花哨。





2.按照服务器的性能,对操作系统的网络连接数,内存分配等等参数进行优化。





3.对于大规模的数据库,建议采用InnoDB方式,而不是MyISAM作为数据库引擎。MyISAM在大数据量的情况下,性能下降严重,而InnoDB还能撑一阵子。mysql的源码包里通常都有一个support-files文件夹,里面有针对不同硬件参数的ini文件。可以cp出来使用。cp一个4GInnoDB的ini文件,再进行修改,好过去修改small或standard的ini文件。





4.文件系统的选择,个人认为最好的选择是ZFS/ext4,其次是ext3/ufs2/ReiserFS,没有太多人会为数据库选择ext2吧。





三、终极优化





为你的特性修改Mysql源代码。





Enjoy yourself!