mysql性能优化
时间:2019-06-13 03:07:32 +0800 CST 浏览:501

文件系统

1、使用deadline/noop这两种I/O调度器

#cat /sys/block/sda/queue/scheduler
noop [dea…

文件系统

1、使用deadline/noop这两种I/O调度器

#cat /sys/block/sda/queue/scheduler 
noop [deadline] cfq  ##默认是cfq

2、使用xfs文件系统,千万别用ext3;ext4勉强可用,但业务量很大的话,则一定要用xfs 3、文件系统mount参数中增加:noatime,
nodiratime, nobarrier几个选项(nobarrier是xfs文件系统特有的)

内核参数

针对关键内核参数设定合适的值,目的是为了减少swap的倾向,并且让内存和磁盘I/O不会出现大幅波动,导致瞬间波峰负载:

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效率;

4、至于网传的read_ahead_kb、nr_requests这两个参数,我经过测试后,发现对读写混合为主的OLTP环境影响并不大(应该是对读敏感的场景更有效果),不过没准是我测试方法有问题,可自行斟酌是否调整;

MySQL参数

1、选择Percona或MariaDB版本的话,强烈建议启用thread
pool特性,可使得在高并发的情况下,性能不会发生大幅下降。此外,还有extra_port功能,非常实用, 关键时刻能救命的。还有另外一个重要特色是
QUERY_RESPONSE_TIME 功能,也能使我们对整体的SQL响应时间分布有直观感受;

2、设置 default-storage-engine=InnoDB
,也就是默认采用InnoDB引擎,强烈建议不要再使用MyISAM引擎了,InnoDB引擎绝对可以满足99%以上的业务场景;

3、调整 innodb_buffer_pool_size 大小,如果是单实例且绝大多数是InnoDB引擎表的话,可考虑设置为物理内存的50% ~
70%左右;

4、根据实际需要设置 innodb_flush_log_at_trx_commitsync_binlog
的值。如果要求数据不能丢失,那么两个都设为1。如果允许丢失一点数据,则可分别设为2和10。而如果完全不用care数据是否丢失的话(例如在slave上,反正大不了重做一次),则可都设为0。这三种设置值导致数据库的性能受到影响程度分别是:高、中、低,也就是第一个会另数据库最慢,最后一个则相反;

5、设置 innodb_file_per_table = 1 ,使用独立表空间,我实在是想不出来用共享表空间有什么好处了;

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

7、设置 innodb_log_file_size=256M ,设置 innodb_log_files_in_group=2
,基本可满足90%以上的场景;

8、设置 long_query_time = 1
,而在5.5版本以上,已经可以设置为小于1了,建议设置为0.05(50毫秒),记录那些执行较慢的SQL,用于后续的分析排查;

9、根据业务实际需要,适当调整 max_connection
(最大连接数)、max_connect_errors(最大错误数,建议设置为10万以上,而
open_files_limit、innodb_open_files、table_open_cache、table_definition_cache
这几个参数则可设为约10倍于max_connection的大小;

10、常见的误区是把 tmp_table_size
和max_heap_table_size设置的比较大,曾经见过设置为1G的,这2个选项是每个连接会话都会分配的,因此不要设置过大,否则容易导致OOM发生;其他的一些连接会话级选项例如:
sort_buffer_size、join_buffer_size、read_buffer_size、read_rnd_buffer_size
等,也需要注意不能设置过大;

11、由于已经建议不再使用MyISAM引擎了,因此可以把key_buffer_size设置为32M左右,并且强烈建议关闭query cache功能;



如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。

本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。


来说两句吧