21条MySQL优化建议(经验总结)
今天一个朋友向我咨询怎么去优化MySQL,我按着思维整理了一下,大概粗的可以分为21个方向。还有一些细节东西(tablecache,表设计,索引设计,程序端缓存之类的)先不列了,对一个系统,初期能把下面做完也是一个不错的系统。
1.要确保有足够的内存
数据库能够高效的运行,最关建的因素需要内存足更大了,能缓存住数据,更新也可以在内存先完成。但不同的业务对内存需要强度不一样,一推荐内存要占到数据的15-25%的比例,特别的热的数据,内存基本要达到数据库的80%大小。
2.需要更多更快的CPU
MySQL5.6可以利用到64个核,而MySQL每个query只能运行在一个CPU上,所以要求更多的CPU,更快的CPU会更有利于并发。
3.要选择合适的操作系统
在官方建议估计最推荐的是Solaris,从实际生产中看CentOS,REHL都是不错的选择,推荐使用CentOS,REHL版本为6以后的,当然OracleLinux也是一个不错的选择。虽然从MySQL5.5后对Windows做了优化,但也不推荐在高并发环境中使用windows.
4.合理的优化系统的参数
更改文件句柄 ulimit–n默认1024太小
进程数限制 ulimit–u 不同版本不一样
禁掉NUMA numctl–interleave=all
5.选择合适的内存分配算法
默认的内存分配就是c的malloc现在也出现许多优化的内存分配算法:
jemallocandtcmalloc
从MySQL5.5后支持声明内存储方法。
[mysqld_safe] malloc-lib=tcmalloc
或是直接指到so文件
[mysqld_safe]
malloc-lib=/usr/local/lib/libtcmalloc_minimal.so