mysql常用的优化参数
2025-07-13 本文已影响0人
flyjar
| 参数名称 | 作用 | 优化建议 | 注意事项 | |
|---|---|---|---|---|
innodb_buffer_pool_size |
InnoDB 存储引擎缓存数据和索引的内存大小 | 专用数据库服务器设置为物理内存的 60% - 80%,如:innodb_buffer_pool_size = 8G
|
调整后需重启 MySQL,监控内存使用防止溢出 | |
innodb_buffer_pool_instance |
将缓冲池划分为多个实例,减少多线程锁竞争 | - 缓冲池 <1G 时设为 1 - 缓冲池 ≥4G 时设为 4-16(建议每个实例 1G-2G) - 实例数 ≈ CPU 核心数/2(不超过 64) |
MySQL 5.7.5+ 支持动态调整,早期版本需重启 | |
key_buffer_size |
缓存 MyISAM 存储引擎的索引块 | InnoDB 为主时设为 16M;有 MyISAM 表时适当增大 | 对 InnoDB 表无影响,无需过大 | |
innodb_log_file_size |
InnoDB 重做日志文件大小,影响写入性能和崩溃恢复时间 | 设置为 256M - 1G,如:innodb_log_file_size = 512M
|
调整前需删除旧日志文件,过大可能延长崩溃恢复时间 | |
slow_query_loglong_query_time
|
记录执行时间超过阈值的查询(慢查询) | 开启:slow_query_log = 1阈值设为 2 秒: long_query_time = 2
|
定期分析日志优化慢查询,避免日志文件过大 | |
max_connections |
限制 MySQL 允许的最大并发连接数 | 根据实际连接需求调整,避免过大导致资源耗尽,如:max_connections = 500
|
配合 wait_timeout 回收空闲连接,避免连接数占满 |
|
innodb_thread_concurrency |
限制 InnoDB 存储引擎的最大线程数 | 通常设为 CPU 核心数的 2 倍,如:innodb_thread_concurrency = 16
|
过高可能导致上下文切换开销增加,过低可能无法充分利用 CPU | |
tmp_table_sizemax_heap_table_size
|
控制内存临时表的最大大小 | 避免过大导致内存溢出,如:tmp_table_size = 64Mmax_heap_table_size = 64M
|
两参数需保持一致,超过阈值会转为磁盘临时表(性能下降) | |
sort_buffer_size |
每个排序线程分配的内存缓冲区大小 | - OLTP 系统:2M-8M - 分析系统:16M-64M - 示例: sort_buffer_size = 4M
|
总内存使用量 = 该值 × 并发线程数,避免因并发过高导致内存溢出 |