MySQL参数优化的选项

一些能够带来最大性能收益的参数调整

1. 调整InnoDB缓冲区

InnoDB是MySQL启动后使用最多的引擎,分配一个足够大的缓冲区能够最大程度上提升MySQL性能。最佳比例控制在机器内存的70~75%左右,比如一台服务器的内存为32GB,将innodb_buffer_pool_size = 22938M(23GB)左右最合理。

InnoDB缓冲区空间大于1GB时,会自动将缓冲区划分为多个实例空间,好处在于:多线程并发执行时,可以减少并发冲突。MySQL官方的建议是每个缓冲区实例必须大于1GB,如果机器内存较小时,例如8/16GB,可以指定为1GB,但是机器内存够大时,达到了32GB/64GB甚至更高,可以适当将每个缓冲区实例调整到2GB左右。

比如现在假设缓冲区共计拥有40GB内存,哪设置将缓冲区实例设置为innodb_buffer_pool_instances = 20个比较合适。

2. 调整工作线程的缓冲区

可以调大sort_buffer、read_buffer、join_buffer几个区域,属于线程私有区域,每条线程都拥有这些区域:

  • sort_buffer_size:排序缓冲区大小,影响group by、order by...等排序操作。
  • read_buffer_size:读取缓冲区大小,影响select...查询操作的性能。
  • join_buffer_size:联查缓冲区大小,影响join多表联查的性能。

这些区域根据机器内存设置1~2倍MB,4G内存将其调整为4/8MB,控制在64MB以下。线程每执行完一条SQL就会释放这些区域,没必要调整的太大。

还可以调整一个参数:max_length_for_sort_data ,这个参数关乎着MySQL排序的方式,排序字段值的最大长度小于该值,会将所有要排序的字段值载入内存排序,但如果大于该值时,则会一批一批的加载排序字段值进内存,然后一边加载一边做排序。第一种效率更高,可以适当调大该参数的值,具体根据业务来做选择,或者交给MySQL自己控制。

3. 调整临时表空间

可以调整tmp_table_size、max_heap_table_size,这两个参数主要是限制临时表可用的内存空间 ,当创建的临时表空间占用超过tmp_table_size时,就会将其他新创建的临时表转到磁盘中创建,十分违背创建临时表加快查询速度的设计初衷。

参数的大小根据show global status like 'created_tmp%'; 的统计信息来决定,用统计出来的信息:Created_tmp_disk_tables / Created_tmp_tables * 100% = 120%,达到这个标准就比较合适,调整这个区域的值需要反复重启MySQL以及压测,比较费时间,在项目中很少使用临时表,也可以不关心这块参数的调整。

4. 调整空闲线程的存活时间

对于MySQL最大连接数无需做过多控制,客户端连接池那边做了调整即可,可以通过下述命令查看数据库连接的峰值:

  • show global status like 'Max_used_connections';

一般在客户端做了连接数控制后,这个峰值都会在客户端最大连接数的范围之内,对于数据库连接唯一需要稍微调整的即是空闲连接的超时时间 ,即wait_timeout、interactive_timeout ,这**两个参数必须一同设置,**否则不会生效,MySQL内部默认为8小时,也就是一个连接断开后,默认也会将对应的工作线程缓存八小时后再销毁,可以手动调整成30min~1h左右,让无用的连接能及时释放,减少资源的占用。

相关推荐
SelectDB6 分钟前
科大讯飞可观测性底座:从 ES/Loki 到 Apache Doris 的可观测存储分析升级实践
数据库
SelectDB12 分钟前
Cisco WebEx 数据平台统一改造:基于 Apache Doris / SelectDB 替换 Trino、Pinot、Iceberg 及 Kyuubi
数据库
数据技术说18 分钟前
MySQL 和 PostgreSQL 的 CDC 方案到底有什么区别?
数据库·架构
SelectDB29 分钟前
灵犀科技统一数据服务平台:基于 Apache Doris / SelectDB 实现存储降本 60%、计算提效 10 倍
数据库
让学习成为一种生活方式1 小时前
KMC 3.2.4 安装与使用--生信工具108
数据库
今天AI了吗1 小时前
从聊天到委派:AI Agent 如何推进长期任务
数据库·人工智能·python·sql·rust
—Miss. Z—1 小时前
第11章 故障管理
网络·数据库·oracle
WA内核拾荒者2 小时前
WhatsApp账号运营SOP的可视化编排与流水线监控
大数据·数据库·windows
名字还没想好☜2 小时前
Kubernetes StatefulSet 实战:为什么数据库不能用 Deployment 部署
数据库·云原生·容器·kubernetes·statefulset
01_ice3 小时前
MySQL事务
数据库·mysql