慢日志探索思路

本文详细介绍了诊断MySQL慢查询的三个主要方向:优化SQL语句,观察MySQL内部状态和外部资源监控。通过示例展示了如何去除不必要的括号、恒定折叠和恒定条件去除来改进SQL。同时,解释了使用PROCESSLIST查看线程状态,使用EXPLAIN分析执行计划,以及利用Profiling来定位SQL执行中的瓶颈。最后,提到了关注机器负载、内存和CPU等外部资源对数据库性能的影响。
摘要由CSDN通过智能技术生成
前言

MySQL慢的诊断思路,一般我会从三个方向来做:

第一个方向是SQL语句本身

  • 需求方一定要按照数据库容易接受的方式去写SQL,这个成本会下降的非常快。
  • 官当文档中Examples of Common Queries 专门写出常规SQL语句
  • 一些示例:
    • 去除不必要的括号:
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xNsS9R18-1640770243919)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e299096d-f749-40ce-b84c-f1a1f4c4971d/Untitled.png)]

    • 恒定折叠:
      在这里插入图片描述

    • 恒定条件去除:
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-58Ah5hqV-1640770243922)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/10d449bc-5462-4d46-95f8-f926711aee1c/Untitled.png)]

第二个方向是MySQL内部的观测

  • 第一步直接的方法就是使用 PROCESSLIST

    PROCESSLIST 可以直观的来看下目前SQL的压力不太正常。
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O21Kpx7l-1640770243923)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a08ed261-74e6-426d-84ab-d32758d15fe0/Untitled.png)]

    • Id

      连接标识符。显示的PROCESSLIST_ID值。

    • User

      声明用户。是 system user指由服务器生成的用于在内部处理任务的非客户端线程

    • Host

      发出语句的客户端的主机名。TCP/IP 连接的主机名以 格式报告, 以便更容易确定哪个客户端在做什么。

    • db

      线程的默认数据库,或者 NULL如果没有选择。

    • Command

      线程代表客户端执行的命令类型,或者Sleep会话是否空闲。

    • Time

      线程处于当前状态的时间(以秒为单位)。

    • State

      指示线程正在执行的操作的操作、事件或状态。

      Killed、Locked、Sending data、Sleeping、Updating等

      大多数状态对应于非常快速的操作。如果一个线程在给定状态下停留了很多秒,则可能存在需要调查的问题。

    • Info

      线程正在执行的语句。

  • 第二步是 EXPLAIN ,模拟优化器执行SQL执行计划

    在日常工作中,我们常常用到 EXPLAIN 这个命令来查看一个这些 SQL 语句的执行计划,查看该 SQL 语句有没有使用上了索引,有没有全表扫描,这都可以通过EXPLAIN 命令来查看。所以我们通过使用 EXPLAIN 获得很多可能被优化器考虑到的访问策略的细节,以及当运行 SQL 语句时哪种策略预计会被优化器采用

    EXPLAIN与可解释语句【SELECTDELETEINSERTREPLACEUPDATE】一起使用时,MySQL 会显示来自优化器的有关语句执行计划的信息。也就是说,MySQL 解释了它将如何处理语句,包括有关如何连接表和按什么顺序连接的信息。有关 EXPLAIN用于获取执行计划信息的信息。
    在这里插入图片描述
    EXPLAIN 中重要字段的参数非常多,准备单拿出一篇来讲解 EXPLAIN ,以帮助选择更好的索引和写出更优化的查询语句。

  • 第三步要做Profilling。

    若这个SQL能再执行一次的话, 就做一个Profilling。

    profiling,用于诊断一条sql在执行过程中的资源消耗情况,可以通过profiling来查看慢sql到底慢在哪里,从而进行合理的优化。
    在这里插入图片描述

第三个方向是外部资源的观测

  • 机器的平均负载,有无异常,IO是否正常
  • 内存状态,页的换进换出有没有什么问题,内存使用率
  • CPU的压力是否均匀
  • 进程资源占用
  • 目前进程和线程的状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值