mysql慢查询

    大家好,我是程序媛雪儿。

    我觉得慢sql这个问题还是挺重要的,因为我目前了解到的后端服务器响应过慢,甚至是线程池爆满,内存溢出,很多时候究其根本原因,是因为有些慢sql没处理好,导致一个任务处理时间过长造成的,所以,咱们今天聊聊mysql慢查询。

如何定位慢查询呢?

方案一:开源工具

调试工具:Arthas

运维工具:Promethus、Skywalking

方案二:MySQL自带的慢日志

慢查询日志记录了所有执行时间超过指定参数的SQL语句。如果想要开启慢查询日志,需要在/etc/my.cnf中配置如下信息

# 开启慢查询开关 0 不开启(默认)1 开启
slow_query_log=1
# 设置sql语句执行超过2s,视为慢查询,记录到日志
long_query_time=2

慢查询日志记录位置:/var/lib/mysql/localhost-slow.log

如何分析慢查询SQL?

可以在sql语句前加上explain或者desc命令获取当前sql如何执行select语句的信息

字段解释:

  • possible_key 当前sql可能会使用到的索引

  • key 当前sql实际命中的索引

  • key_len 索引占用的大小(可以通过key和key_len查看是否可能会命中索引)

  • Extra额外优化建议

extra

含义

Using where; Using Index

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

Using index condition

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

如果是Using index condition,sql建立的索引是需要优化的

  • type 指的是这条sql连接的类型,性能由好到差为NULL、system、const、eq_ref、ref、range、index、all

    • system:查询系统中的表

    • const:根据主键查询

    • eq_ref:主键索引查询或唯一索引查询(查询出来只有一条记录)

    • ref:索引查询(可能会有多条记录)

    • range:范围索引

    • index:索引树擦汗寻

    • all:全盘扫描

一般来说,type为index或者all,需要进行优化

    我们找到慢sql后,下一步就是优化了,具体怎么优化呢,咱们留着以后聊。

         欢迎大家关注我的微信公众号,程序媛雪儿,雪儿会定期在上面发布编程的知识碎片,也有雪儿博客地址,上面有详细系统的笔记,雪儿是全栈,但是公众号目前主要还是发后端的技术,以后可能也会涉及到一些前端的知识,我们下期见,拜拜~

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值