it编程 > 数据库 > Mysql

MySQL 调优的实战思路

7人参与 2025-12-13 Mysql

我是怎么做 mysql 调优的(实战思路)

这不是“某几个参数调一调”的问题,而是一整套从 架构 → sql → 索引 → 配置 → 系统 的排查流程。
你可以把这篇当成自己的 mysql 调优 checklist。

一、调优前的共识:先度量,再优化

调优最怕两件事:

  1. 拍脑袋调参数:改了一堆配置,qps 没上去,反而更慢;
  2. 只盯一个点:只会改 innodb_buffer_pool_size,其他全靠缘分。

所以第一步永远是:

原则:先找到“最痛的那块”,再下手。

二、第一刀:从 sql 入手(慢查询 & 执行计划)

绝大多数 mysql 性能问题,都可以归结为:sql 写得不行 + 索引没设计好

2.1 开启慢查询日志

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:

2.2 对慢 sql 用 explain 做执行计划分析

explain select ...;

重点看:

2.3 改写 sql + 补索引

-- ❌ 错误示例:索引容易失效
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);

实战经验:先搞定 top n 慢 sql,系统性能往往就上一个台阶。

三、第二刀:索引与表结构设计

3.1 索引设计思路

  1. 区分“高频查询条件”和“偶尔查查”;
  2. 给经常出现在 where / join / order by / group by 的列设计索引;
  3. 尽量用 联合索引代替多个单列索引
  4. 注意索引列的选择性(区分度):
    • 性别、是否删除(0/1)这类字段不要单独建索引
    • 可以放在联合索引里。

3.2 合理选择主键与存储引擎

innodb:

表结构方面:

四、第三刀:innodb 关键参数调优

在 sql & 索引搞定后,如果数据库仍吃紧,可以看配置。

4.1 innodb_buffer_pool_size(最关键的内存参数)

innodb_buffer_pool_size = 8g   # 视机器内存而定

4.2 innodb_log_file_size / log_buffer_size

innodb_log_file_size = 1g
innodb_log_buffer_size = 64m

4.3 innodb_flush_log_at_trx_commit

控制事务提交时 redo log 的刷盘策略:

业务取舍:

4.4 连接数相关

max_connections
thread_cache_size
wait_timeout
interactive_timeout

五、第四刀:操作系统 & 硬件层面

当你确认:

此时数据库仍然吃紧,就要看系统层面。

5.1 磁盘 io

5.2 cpu

5.3 网络

六、第五刀:架构级优化(分库分表 & 读写分离)

当单实例再怎么调也扛不住时,就是架构层面问题了。

6.1 读写分离

典型做法:

适合场景:

6.2 分库分表

如果单表行数上亿,索引高度、统计信息、缓存命中都会出问题。

常见拆分维度:

拆分后要注意:

七、监控与排查工具清单

调优离不开“观察工具”:

  1. 慢查询日志:慢 sql 排查入口;
  2. explain / explain analyze:看执行计划、实际耗时;
  3. show processlist:看当前连接、是否有锁等待;
  4. show engine innodb status\g:看死锁、事务等待;
  5. information_schema / performance_schema / sys 库:
    • 统计哪些 sql 最耗费资源。
  6. 操作系统工具:topiostatvmstatsar 等。

八、一套实战调优流程(总结版)

给你一套可直接复用的步骤:

九、小结

mysql 调优本质上是一个“找瓶颈 → 定位层级 → 有针对性优化”的过程:

  1. sql 与索引永远是第一优先级;
  2. innodb 参数是在“sql/索引合理之后”的加分项;
  3. 再往上,是硬件和架构层面的扩展。

一句话:

不要指望靠改几个参数就“神奇提速”,调优一定是数据驱动 + 全链路思考
养成“看慢日志 + explain + 监控”的习惯,你的 mysql 水平会非常快地上来。

到此这篇关于mysql 调优的实战思路的文章就介绍到这了,更多相关mysql调优思路内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

您想发表意见!!点此发布评论

推荐阅读

MySQL业务数据量增长到单表成为瓶颈时的解决方案

12-13

MySQL各种 JOIN 的特点及应用场景分析

12-13

mysql的判断语句方式

12-13

MySQL数据库索引与事务从基础到实践指南

12-12

MySQL中gtid_purged 的初始化和更新机制详解

12-11

MySQL 机器重启后gtid_executed初始化流程解析

12-11

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论