mysql定位慢查询以及分析原因

看本篇文章之前建议先了解索引,索引分类,和回表查询的概念

导致慢查询的原因

  1. 聚合查询

  2. 多表查询

  3. 表数据量过大查询

  4. 深度分页查询

慢查询的现象就是页面加载过慢、接口压测响应时间过长,超过1s

如何定位慢查询

方案一

方案二

MySQL自带慢日志,这里主要讲这个,我的是8版本,你如果是5版本可能本篇文章帮助不大。

mysql中查询慢日志是否开启

复制代码
 show variables like 'slow_query_log'; 

mysql装在windows的话修改系统的my.ini配置文件,在这里能找到这个文件: C:\ProgramData\MySQL\MySQL Server 8.0,注意:ProgramData是隐藏起来的。

文件修改好是这样的。你只需要改第一行和第三行。第一行是慢日志开关,1为开,0为关。 第三行是慢日志记录时间(单位秒),sql执行超过这个时间就会被记录到慢日志文件

圈起来第二行是让你注意,慢查询日志不叫CCC-slow.log,千万注意,要想知道在哪,在mysql里面执行下面代码块语句。

复制代码
show variables like '%slow_query_log%';  

现在我执行一条语句,执行时间为15.21s,超过了2s

此时慢日志里面就会记录该条语句信息。

如何分析慢查询原因

导致慢的有下面四个原因,现在我们定位到了一条慢查询,如何分析导致慢的原因呢? 有一招叫做查看sql执行计划

这里来看个前置知识,慢查询聚合索引 的解决办法是建立临时表,多表查询 是优化sql,尽量别用多表查询,放业务里面查多次。表数据量过大用索引解决,深度分页查询后续再说。

把explain加在sql命令前面就可以查看该sql的执行计划,exlain是mysql自带的分析工具。 来看一个新sql的执行计划,这是个根据条件查询语句,可以根据索引去优化。

你需要关注字段如下

  1. "possible_keys": 可能用到的索引。

  2. "key": 实际用到的索引

  3. "key_len": 索引占用的大小

  4. "extra": 额外的优化建议,证明有优化空间,例如下图

  1. "type": 这条sql的连接的类型,性能由好到差为NULL、system、const、eq_ref、ref、range、index、all。 接下来我详细给你介绍一下这几个值的含义。

null: 是我们的sql没使用到表,这个很少见,无需关注。

system: 是指查询的是mysql系统中的表,开发也不常用。

const:(常用),根据主键查询。

eq_ref: 主键索引查询或唯一索引查询

ref: 根据索引查询,和eq_ref不一样,是其他索引,可以查出多条数据。例如select * from user where name = "张三";有可能多个人叫张三。

range: 范围查询。

index: 全索引查询,索引树扫描,效率不高,一般都是需要优化的。

all: 不走索引,效率最低,全盘扫描。需要优化。

慢查询分析总结

相关推荐
猫咪很可爱7 分钟前
Oracle TEMP 表空间不足(ORA-01652)问题分析与优化实践
数据库·oracle
九零HTTP1 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
Data-Miner2 小时前
需要做财务数据分析,有什么好用的工具?从准备到出报告的实操指南
大数据·数据库·数据分析
袋鼠云数栈2 小时前
让 SQL 解析不再重复造轮子:SqlParserX 正式开源
数据库·人工智能·sql·开源·数据治理
这个DBA有点耶3 小时前
期货 CTP 系统 Oracle RAC 迁移国产库实战:读写分离架构设计与性能对标
数据库·架构·dba
数据库安全3 小时前
AI数据访问安全 |如何控制AI访问权限,防止越权
数据库·安全
小羊没烦恼!3 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
这个DBA有点耶4 小时前
Redo Log循环写与checkpoint推进:长事务阻塞下的Checkpoint风暴完整链路
数据库·mysql·代码规范
jnrjian4 小时前
pg_waldump --key-file-name status 查看wal 产生的db
数据库
SelectDB技术团队5 小时前
Snowflake 的开源替代怎么选:能力对照、三条部署路径与迁移执行
大数据·数据库·云原生·开源·snowflake·apache doris