MySQL内存调优关键在于按负载合理分配,重点是innodb_buffer_pool_size设为物理内存50%–75%(专机)或更低(共存服务),命中率应>95%,并合理控制max_connections、sort_buffer_size、tmp_table_size等参数,8.0起已移除查询缓存。
MySQL内存配置直接影响查询速度、并发能力和系统稳定性,关键不是堆大内存,而是按实际负载分配给最耗资源的组件。
重点调优 innodb_buffer_pool_size
InnoDB 缓冲池是 MySQL 最核心的内存区域,用于缓存数据页和索引页。若服务器专跑 MySQL,建议设为物理内存的 50%–75%;若还运行其他服务(如应用、Redis),需预留足够空间,避免系统频繁 swap。
- 查看当前设置:SHOW VARIABLES LIKE ‘innodb_buffer_pool_size’;
- 观察命中率是否健康:SHOW STATUS LIKE ‘Innodb_buffer_pool_read%’; 计算公式为 (1 – Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) × 100%,理想值应 >95%
- 动态调整(8.0+ 支持在线扩容):SET GLOBAL innodb_buffer_pool_size = 4294967296;(即 4G),但重启后失效,需同步写入 my.cnf
合理控制连接与排序内存
每个客户端连接都会占用独立内存,大量短连接或复杂排序/临时表操作容易引发 OOM。