mysql:如何定位慢查询

1.如何定位慢查询

慢查询出现情况:

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

1.开源工具

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

2.自带慢日志

利用mysql自带慢日志:

慢日志查询记录了所有执行超过指定参数的所有sql语句的日志。如果要开启慢查询日志,需要在mysql的配置文件(/etc/my.conf)中配置如下信息:

image-20240308195204669

配置完毕后,通过以下指令重新 启动mysql服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysql/localhost-slow.log

image-20240308195413929

2.如何优化慢查询

1.可以才用EXPLAIN或者DESC命令获取Mysql如何执行select语句的信息

image-20240308200045578

  • possible_key 当前SQL可能会使用到的索引
  • key 当前SQL实际命中的索引
  • key_len 索引占用的大小
  • Extra 额外的优化建议
  • type 这条sql的连接类型,性能由好到差为null、system、const、eq_ref、ref、range、index、all
    • system:查询系统中的表
    • const:根据主键查询
    • eq_ref:主键索引或者唯一索引查询
    • ref:索引查询
    • range:范围查询
    • index:索引树扫描
    • all:全盘扫描

image-20240308200315164

总结:可以采用mysql子弹带的分析根据EXPLAIN

  1. 通过key和key_len检查是否命中了索引(索引本省存在是否失效的情况)
  2. 通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描
  3. 通过extra建议判断,是否出现了回表,如果出现了,可以尝试添加索引或修改返回字段来修复