MySQL 如何处理 慢查询

文章介绍了两种定位MySQL慢查询的方法:使用运维工具如Arthas、Prometheus和Skywalking,以及通过MySQL内置的慢日志功能,调整long_query_time参数。开启慢日志后,可以分析日志文件来找出问题SQL。分析时,可以利用EXPLAIN或DESC命令查看索引使用情况和连接类型,帮助优化查询性能。

如何定位慢查询?

方式一:

可以使用开源工具,比如:

  • 调试工具:Arthas
  • 运维工具:Prometheus 、Skywalking 

方式二:

使用MySQL自带慢日志 

慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志

如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息: 

# 开启MySQL慢日志查询开关

slow_query_log=1

# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志 long_query_time=2 

配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息 

/var/lib/mysql/localhost-slow.log。 

如何分析慢查询?

可以采用EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息 

主要字段: 

  • possible_key  当前sql可能会使用到的索引
  • key 当前sql实际命中的索引
  • key_len 索引占用的大小
  • Extra 额外的优化建议,其可能出现的值如下:

Extra

含义

Using where; Using Index

查找使用了索引,需要的数据都在索引列中能找到,不需要回表查询数据

Using index condition

查找使用了索引,但是需要回表查询数据

  • type 这条sql的连接的类型,性能由好到差为NULL、system、const、eq_ref、ref、range、 index、all ,各自具体含义如下:

system:查询系统中的表

const:根据主键查询

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

ref:索引查询

range:范围查询

index:索引树扫描

all:全盘扫描 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值