开发者学堂课程【MySQL 企业常见架构与调优经验分享:常用 MYSQL 调优策略实战讲解】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/383/detail/4813
常用 MYSQL 调优策略实战讲解(二)
内容介绍:
一、内核参数优化
二、MYSQL 参数优化建议
一、内核参数优化
1.内核参数通过内存和文件系统这两个方面进行优化。首先内存,重点关注vm.swappiness 参数,这个参数是对使用 swap 的几率做了个百分比的判断,比如这个值越小,对 swap 的使用率就会越低。对于 MYSQL 服务器来说要尽量去利用 vm.swappiness ,降低 swap 使用率。
RHEL7/centos7 以上则慎重设置为 o ,可能发生 OOM 。
2. 调整 vm.dirty_background_ratio、vm.dirty_ratio 内核参数,用户在提交完成之后,数据不会马上修磁盘而是放到内存里边,这部分数据我们称为脏数据, vm.dirty_background_ratio 指定这个脏数据在什么情况下,把数据刷到硬盘的一个最大的占用百分。
比如设为10%,当脏数据量达到物理内存的10%之后,必须要把脏数据刷的硬盘上去。vm.dirty_ratio 是一个标准阈值就是,当脏数据量达到配置的标准,就会触发相关的写操作,会把脏数据写到硬盘上去。
调整 vm.dirty_background_ratio、vm.dirty_ratio 内核参数以确保能持续将脏数据刷新到磁盘,避免瞬间 l/o 写 ,产生等待。
3. 调整 net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse 都设置为1,减少 TIME_WAIT,提高 TCP 效率。
问题解答
(1)通常情况下都是先做 raid1 ,然后再做 raid10 ;
(2)如果在频繁读写的时候会对硬盘有很大的占用率,这样然后降低?
答:占用率高是正常情况,不需要降低,因为充分利用了 CPU 的资源;判断它是否正常是看它运行是否顺畅。
(3)有些数据开始读写困难,直接去 MYSQL 读,导致阻塞困难。MYSQL 是用于大数据的读写。
二、MYSQL 参数优化建议
1.建议设置 default-storag-engine=lnnoDB ,现在百分之九十九的业务环境 InnonDB 都是可以满足的,从这个运维的角度来说如果使用会在后续的维护中有很多好处。
在故障恢复、份等等各个方面,都是有很大的好处的,所以强烈建议不要再使用 MyISM 引擎。
2.调整 innodb_buffer_pool_size 的大小,如果是单实例且绝大多数是 lnnoDB 引擎表的话,可考虑设置为物理内存的50%-70%左右(设置越大,内存越高,读写性能也会越好)。
因为这个值原理上来说是设置的越大,它能缓存数据越多,缓存的数据越多 MySQL 读写性能可能会越高,尽量把这个空闲的物理内存都交给它去用。
3、设置 innodb_file_per_table=1,InnoDB 可以使用独立的表空间也可以使用共享表空间,而使用共享表空间没有什么好处,所以可以通过这个参数配置使用独立表空间。
4. 调整 innodb_data_file_path=ibdata1:1G:autoextend,不要默认的10M,在高并发场景下,性能会有很大提升。
默认情况下,这个配置的值是10MB大小,如果我们的业务不是很大,或者对数据库写操作不是很频繁也是足够的,但是如果出现大一点的情况就会是不够的。虽然它有后端会自动扩展基础,但自动扩展是会耗费更多的资源,所以可以在刚开始的时候将数据文件的值设置大一点。
5. 设置 innodb_log_file_size=256,
innodb_log_files_in_group=2,基本可以满足大多数应用场景。
6. 调整max_connection (最大连接数)、
max_connection_error (最大错误数)设置,根据业务量大小进行设置。如果业务量是比较大的话,设置值大一点,尽量能够满足业务需求。
7. open_files_limit、innodb_open_files、table_open_cache、table_definltion_cache 可以设置大约为max_connection的10倍左右大小。
8. Key_buffer_size 作用很小建议调小,32M左右即可,另外建议关闭 query cache(对提高性能方面没有什么帮助)。
9.Mp_table_size和max_heap_table_size 设置不要过大,另外 sort_buffer_size、join_buffer_size、read_buffer_size、read_rnd_buffer_ size 等设置也不要过大。