MySQL调优

MySQL调优的一般流程为:

  1. 对MySQL进行监控
  2. 排查慢SQL
  3. 通过执行计划找出慢的原因
  4. 制定优化策略

对MySQL进行监控

监控工具(例如Prometheus+Grafana)监控MySQL,发现查询性能变慢,报警提醒运维人员。

排查慢查询日志

前置准备

java 复制代码
// 开启慢查询日志,修改慢查询阈值
SET slow_query_log='ON';     #开启慢查询日志
SET long_query_time = 1;     #设置慢查询阈值(单位 秒)

找出最慢的几条SQL

运行时间超过 long_query_time 的SQL语句,会被写入到慢查询日志文件中或者mysql.slow_log表中。此时,可以使用慢日志分析工具 mysqldumpslow 来进行分析慢查询。

shell 复制代码
mysqldumpslow 命令的具体参数如下:

-a: 不将数字抽象成N,字符串抽象成S
-s: 是表示按照何种方式排序:
    c: 访问次数
    l: 锁定时间
    r: 返回记录
    t: 查询时间
    al:平均锁定时间
    ar:平均返回记录数
    at:平均查询时间 (默认方式)
    ac:平均查询次数
-t: 即为返回前面多少条的数据;
-g: 后边搭配一个正则匹配模式,大小写不敏感的;

示例:

参考:慢查询分析调优工具~mysqldumpslow | MySQL 技术论坛 (learnku.com)

sql 复制代码
# 命令行,按照查询时间排序,查看前五条 慢查询SQL 语句
mysqldumpslow -s t -t 5 /var/lib/mysql/xxx-slow.log   

# 得到访问次数最多的10条SQL:
mysqldumpslow -s r -t  10 /var/lib/mysql/xxx-slow.log

# 得到按照时间排序的前10条里面含有左连接的SQL:
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/695f5026f0f6-slow.log
# 也支持管道符命令
mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/695f5026f0f6-slow.log | more //分页显示

分析执行计划

上一步骤【排查慢查询日志】中找到了 慢SQL语句之后,现在通过分析该 慢SQL语句 的执行计划,分析出具体慢的原因。

具体的执行计划中的各个参数表示的含义,参考:一文读懂 MySQL Explain 执行计划-阿里云开发者社区 (aliyun.com)

可以根据:EXPLAIN 你要分析的慢SQL语句如(EXPLAIN SELECT * FROM user u WHERE u.id=1)输出的内容进行分析:

复制代码
mysql> EXPLAIN SELECT * FROM user u WHERE r.name = '扫地机';
+----+-------------+-------+------------+-------+---------------+--------------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys | key          | key_len | ref   | rows | filtered | Extra       |
+----+-------------+-------+------------+-------+---------------+--------------+---------+-------+------+----------+-------------+
|  1 | PRIMARY     | u     | NULL       | const | PRIMARY       | PRIMARY      | 4       | const |    1 |   100.00 | Using where |
+----+-------------+-------+------------+-------+---------------+--------------+---------+-------+------+----------+-------------+

比如:

  • Type为ALL的表示全表扫描。此时可以添加索引,避免全表扫描。

制定优化方案

通过分析完执行计划之后,接下来就开始制定优化方案了。

具体优化方案,参考:https://blog.csdn.net/qq_40991313/article/details/131059110

todo:后续可根据实际使用情况,将优化方案具体的的梳理出来...

相关推荐
Android-Flutter几秒前
Compose 什么叫重组?怎么样触发重组?
android·compose
硫酸锌017 分钟前
安卓手机连接Windows电脑后通过DHCP服务为手机分配IP地址
android·windows·计算机网络
FluxDB12 分钟前
《用 Rust + GPUI 做了一个开源数据库客户端:FluxDB》
数据库
roman_日积跬步-终至千里12 分钟前
【数据Agent论文·查询与语义|09】Spider 2.0:从生成SQL走向完成企业工作流
数据库·sql·数据分析
曦夜日长13 分钟前
MySQL系统篇,数据库基础(二):数据库概念、SQL 分类与存储引擎
数据库·sql·mysql
骑着蜗牛撵大象32714 分钟前
设备监控数据存与查:Spring Boot 接入 TimescaleDB 超表的完整落地
android·spring boot·后端·springboot·时序数据库·es·设备监控
泡海椒14 分钟前
JQuick-SQL AST 解析:从 SQL 文本到强类型节点
数据库·sql
要开心吖ZSH18 分钟前
SeaTunnel + Doris + MySQL-CDC 数据同步故障排查个人笔记
数据库·mysql·doris·seatunnel·mysql cdc
data analyse 45627 分钟前
Session数怎么计算?明确会话切分、超时与跨页规则
java·服务器·数据库
云贝贝贝29 分钟前
MySQL 线上报 Lock wait timeout 别慌:6 招定位锁等待与死锁
android