mysql定位慢查询和分析

1. 使用工具?

运维工具:skywalking,可以监测出哪个接口,然后找到对应的sql。

2. 在调试阶段使用mysql配置?

  • 确保慢查询日志功能已经开启。
  • 设置慢查询阈值(可选)。
  • 分析慢查询日志。
    在调试阶段中使用,是因为如果在生产环境中开启慢查询功能,会影响数据库的性能。

步骤1和2可以通过修改MySQL配置文件my.cnf(或my.ini在Windows上)来完成。
在my.cnf中添加或修改以下配置项:

    [mysqld]
    #为1开启慢查询日志
    slow_query_log = 1 
    #指定慢查询日志文件路径
    slow_query_log_file = /var/log/mysql/mysql-slow.log 
    #设置慢查询的阈值为2秒,超过2秒就回被记录在文件里
    long_query_time = 2

步骤3通常涉及到分析慢查询日志文件。你可以使用MySQL提供的mysqldumpslow命令行工具来帮助你分析。
例如,要列出执行时间超过5秒的查询并按照执行的次数排序:

    mysqldumpslow -s c -t 5 /var/log/mysql/mysql-slow.log

3. 优化

3.1 可能原因:

  • 聚合查询
  • 多表查询
  • 表数据量过大查询
  • 深度分页查询

3.2 分析:

命令:

explain select * from 表名 where 条件
explain select * from  users where username = 'nacos'; 

举例:

在这里插入图片描述
type:sql连接的类型,性能有好到差 NULL、system、const、eq_ref、ref、range、index、all

  • system:查询系统中的表
  • const:根据主键查询
  • eq_ref:主键索引查询或唯一主键查询
  • ref:索引查询
  • range:范围查询
  • index:索引树扫描
  • all:全表扫描

3.3 分析结果

  • 通过possible_key和key检查是否命中了索引(索引本身是否存在失效的问题)
  • 通过type字段,查看sql是否还有优化的空间(是否存在全索引扫码或全盘扫码的问题)
  • 通过exira建议,是否出现了回表等情况,如果出现了,则通过添加索引或修改字段来解决
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值