7人参与 • 2025-12-13 • Mysql
这不是“某几个参数调一调”的问题,而是一整套从 架构 → sql → 索引 → 配置 → 系统 的排查流程。
你可以把这篇当成自己的 mysql 调优 checklist。
调优最怕两件事:
innodb_buffer_pool_size,其他全靠缘分。所以第一步永远是:
select version();show global status 中的一些关键指标。原则:先找到“最痛的那块”,再下手。
绝大多数 mysql 性能问题,都可以归结为:sql 写得不行 + 索引没设计好。
set global slow_query_log = 1; set global long_query_time = 1; -- 超过 1 秒的算慢查询 set global log_queries_not_using_indexes = 1; -- 也可以先开一阵
然后看:
show variables like 'slow_query_log%'; show variables like 'long_query_time';
线下或运维平台中,可以用工具分析 slow log:
explain select ...;
重点看:
type:访问类型(all、index、range、ref、const 等);
all = 全表扫描,基本就是优化对象;key:实际使用的索引;rows:预估扫描行数;extra:using filesort、using temporary、using index 等。-- ❌ 错误示例:索引容易失效 where date(create_time) = '2025-01-01'; -- ✅ 正确示例:使用范围 where create_time >= '2025-01-01 00:00:00' and create_time < '2025-01-02 00:00:00';
优先使用 联合索引 + 最左前缀:
-- 经常这么查 where user_id = ? and status = ? and create_time > ?; -- 就建一个 create index idx_user_status_time on t_order(user_id, status, create_time);
select *(只取必要字段);in;or 拼字段(可考虑拆成 union);实战经验:先搞定 top n 慢 sql,系统性能往往就上一个台阶。
where / join / order by / group by 的列设计索引;innodb:
表结构方面:
text/blob)频繁参与查询,可拆分表;在 sql & 索引搞定后,如果数据库仍吃紧,可以看配置。
innodb_buffer_pool_size = 8g # 视机器内存而定
innodb_log_file_size = 1g innodb_log_buffer_size = 64m
控制事务提交时 redo log 的刷盘策略:
1:每次事务提交都刷盘(最安全,最耗 io);2:每次提交写 os 缓存,每秒刷盘一次;0:每秒写一次 + 刷盘。业务取舍:
1;2,性能更好。max_connections thread_cache_size wait_timeout interactive_timeout
max_connections 不是越大越好:
当你确认:
此时数据库仍然吃紧,就要看系统层面。
iostat、vmstat、iotop 看:
当单实例再怎么调也扛不住时,就是架构层面问题了。
典型做法:
适合场景:
如果单表行数上亿,索引高度、统计信息、缓存命中都会出问题。
常见拆分维度:
拆分后要注意:
调优离不开“观察工具”:
explain / explain analyze:看执行计划、实际耗时;show processlist:看当前连接、是否有锁等待;show engine innodb status\g:看死锁、事务等待;information_schema / performance_schema / sys 库:top、iostat、vmstat、sar 等。给你一套可直接复用的步骤:
type 是否为 range/ref/const 而不是 all;using filesort、using temporary。innodb_buffer_pool_size、innodb_log_file_size、innodb_flush_log_at_trx_commit 等;mysql 调优本质上是一个“找瓶颈 → 定位层级 → 有针对性优化”的过程:
一句话:
不要指望靠改几个参数就“神奇提速”,调优一定是数据驱动 + 全链路思考。
养成“看慢日志 + explain + 监控”的习惯,你的 mysql 水平会非常快地上来。
到此这篇关于mysql 调优的实战思路的文章就介绍到这了,更多相关mysql调优思路内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论