Mysql性能调优策略

一、硬件层相关优化

修改服务器BIOS设置


1、发挥CPU最大性能:选择Performamce Per Watt Optimized(DACP)模式,缺点是比较耗电

2、Memory Frequency(内存频率)选择Maximum Performance(最佳性能)

3、内存设置菜单中,启用Node Interleaving,避免NUMA问题


二、磁盘I/O相关

1、使用SSD硬盘

2、磁盘阵列存储,建议阵列卡同时配备CHCHE及BBU模块,提升IOPS

3、raid级别尽量选择raid10,而不是raid5


三、文件系统优化


1、使用deadline或noop两种I/O调度器,别用cfq

2、使用xfs文件系统,别用ext3;ext4勉强可用,但业务量很大的话,一定要用xfs

3、文件系统mount参数中增加noatime,nodiratime,nobarrier几个选项(nobarrier是xfs文件系统特有)

ps:atime是文件的访问时间,还有一个对应的wtime 是文件的修改时间,dirtime对应的是目录,设置为no,就是让系统对这些属性不做记录,从而提高性能(一般加加了noatime就可以了,如果系统判断是noatime,就不去检查是否nodirtime,nobarrier是xfs系统独有的,最好也加上)

四、内核参数优化

1、将vm.swappiness设置为5-10左右即可,甚至设置为0(RHEL 7以上则慎重设置为0,除非你允许OOM kill发生),以降低使用SWAP的机会;

2、将vm.dirty_background_ratio设置为5-10,将vm.dirty_ratio设置为它的两倍左右,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写,产生严重等待(和MySQL中的innodb_max_dirty_pages_pct类似);
3、将net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse都设置为1,减少TIME_WAIT,提高TCP效率;


五、Mysql参数优化


1、设置default-storage-engine=InnoDB

2、调整innodb_buffer_pool_size的大小,如果是单实例且绝大多数是innoDB引擎的话,可考虑设置为物理内存的50%-70%,理论上来讲缓冲池设置越大,效率越高,充分利用物理内存

3、设置Innodb_file_per_table=1 使用独立表空间

4、设置innodb_data_file_path = ibdata1:1G:autoextend,千万不要用默认的10M,否则在有高并发事务时,会受到不小的影响

5、设置Innodb_log_file_size=256M,设置Innodb_log_files_in_group=2 

6、适当调整max_connection(最大连接数)、max_connection_error(最大错误数),建议设置为10万以上,而open_files_limit、innodb_open_files、table_open_cache、table_definition_cache这几个参数则可设为约10倍于max_connection的大小

7、key_buffer_size 建议调小,32M左右,另外建议关闭querycache

8、常见的误区是把tmp_table_size和max_heap_table_size设置的比较大,一般默认参数就沟通了,可以适当增加,曾经见过设置为1G的,这2个选项是每个连接会话都会分配的,因此不要设置过大,否则容易导致OOM发生;其他的一些连接会话级选项例如:sort_buffer_size、join_buffer_size、read_buffer_size、read_rnd_buffer_size等,也需要注意不能设置过大。





你可能感兴趣的:(Mysql)