• 1
  • 0
分享
  • 深聊MySQL,从入门到入坟之:如何定位慢SQL,不得不看的一篇文章。
  • Carl_奕然 2022-11-02 10:08:02 字数 1773 阅读 1444 收藏 0

1、引言

小鱼:小屌丝,你在干啥呢?出去溜达啊。
小屌丝:好的,给我10分钟时间,我排查个问题。
小鱼:好的, 不着急。
2000.jpg小鱼:走啊,再不走 就赶不上2路公共汽车了。
小屌丝:鱼哥, 再给我几分钟时间,问题还没定位到呢。
小鱼:啥问题啊,这么难定位。
小屌丝:就是 有一个慢SQL,但是… 但是 …
小鱼:不会不知道 如何定位慢SQL??
小屌丝:额… 确实 … 所以…
小鱼:我来。

2、定位慢SQL

关于慢查询, 我想做性能测试的同学最有感触,也最有发言权。
一个接口查询20条数据, 命名可以1一秒以内命中, 偏偏搞了30多秒的时间。
这有没有一种想翩翩起舞的 冲动。

2baidu.gif

但是,时刻要谨记, 冲动是魔鬼, 所以,切勿冲动。切勿冲动。

在想冲动的时候,就像小鱼这样,对自己说三句:冷静、冷静、冷静

接下来,我们就来聊一聊如何快速的定位慢查询。

2.1 日志定位

2.1.1 开启阈值

我们,开发的同学,最常用的定位慢SQL的方式,就是通过日志来定位的。

MySQL的慢查询日志:

    记录响应时间是否超过超过long_query_time设置的值;

    扫描记录数是否小于min_examined_row_limit;

注:

    log_slow_admin_statements:默认 =OFF,即 不会记录管理语句,需要手动开启, =ON;

    log_queries_not_using_indexes:默认 =OFF,即不使用索引语句,需要手动开启 =ON;

2.1.2 操作步骤

如何使用慢查询日志,进行查询, 只有4步:

    1、 开启慢查询;

set global slow_query_log = on

    2、设置慢查询阈值;

set global long_query_time = 1

    3、查找慢日志路径;

show global variables like "log_path"


    4、查找慢日志文件名称;

show global variables like "log_filename"

这里说一下:
如果你想另辟新路, 使用第三方工具(mysqldumpslow)那也是非常的奈斯。
关于mysqldumpslow的使用,这里就不过多赘述了。如果对mysqldumpslow 感兴趣,可以自行跳转到官网

2.2 show processlist 来定位

小屌丝:鱼哥,如果遇到正在执行慢查询时,我们该如何操作?
小鱼:这个问题,很常见,但是也不是没有解决的办法,就是show processlist。

2.2.1 简介

优点
正如上面小屌丝所说,看到正在执行的慢SQL,可能会引起数据库负载过高,这个时候,就需要使用 show processlist:

  • 先 查询当前mysql有些线程正在运行;

  • 分析哪些可以线程可以被Kill;

  • 最后kill掉线程即可。

参数

无标题.png

2.2.2 使用

了解了上面的参数,我们就来实例进行;

命令执行

mysql>show processlist\E`

`*************************** 10. row ***************************`

   `Id: 3366986`

   `User: Carl_DJ`

   `Host: 10.211.255.192:89068`

   `db: test_db`

   `Command:  `

   `Time: 2`

  `State: User sleep`

  `Info: select sleep(10)`


这里,就是通过Time 来判断是否为慢SQL。

3、总结

小屌丝:我屮艸芔茻,可以啊,鱼哥, 这讲的确实很明白。
小鱼:我没想到,你竟然会被慢SQL难住。
小屌丝:其实,我只是想让你多分享一点慢SQL的知识,并不是我被难住了。

关于MySQL的知识, 小鱼也有过很多的分享,例如:


其他的小鱼就不一一例举了, 如果想看更多关于mysql的知识,可以跳转到小鱼的MySQL专栏

最后,再唠叨一句,我是奕然:




  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 最近在阅读《高性能之道》这本书,其中有一个小标题让我突然想到一个旧话题:拓展自己的边界。弱化边界感。在我之前读过的技术类书籍中,往往更多偏重于不同团队之间的协作配合。而在这本书中我读到了更多关于个人成长方面的。如果你在在一个岗位工作时间变长之后,在经过稳定期之后就会遇到工作瓶颈。如何能突破这种瓶颈限制呢,作者提出一个方向:突破边界。# 拓展边界的重要性在IT工作中,拓展自己的边界绝对是非常重要的。作为一名互联网工作者,我们常常面对着快速发展的技术和变化的行业趋势。如果我们只停留在自己熟悉的领域,不积极主动地学习和尝试新的知识和技能,很可能会被时代抛在身后,错失许多机会。拓展自己的边界可以带来许...
            0 0 954
            分享
          •   1.ant简介  1.1 什么是ant?  JMeter: 编写测试脚本生成jmx脚本,运行接口测试。JMeter相当于篮球场,jmx脚本相当于篮球运行场。  ant: 构建工具,通过调用JMeter来批量运行测试脚本,并生成测试报告。Ant是一个功能强大的打包编译工具。我们使用他的目的是将JTL(xml)格式文件转化为html格式的文件,相当于篮球教练的角色。  1.2 什么是构建  概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅于此,但是主要用来干这个。  2. 构建ant环境  1)去Apache官网上下载ant最新版,我下载的是apa...
            14 17 4037
            分享
          •        1、VisualStuio中的测试资源管理器、CodeLens和ReSharper       这篇文章实践使用VisualStudio 2019进行单元测试。在VisualStudio中通常都会使用“测试资源管理器”进行单元测试。       Professional和Enterprise版本可以使用CodeLens,这大大方便了测试的运行与调试。       但CodeLens的图标常常刷不出来,一些第三方插件(如Re...
            1 1 3039
            分享
          • Appinum前置知识app类型和区别Andriod SDK元素获取—UI Automatoradb命令实践Android 调试桥adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。Tips: 在 android_sdk/platform-tools/ 中找到 adb 工具,然后根据其具体的路径配置好环境变量。然后启动cmd 输入‘adb’即可查看是否配置成功。adb 的工作原理启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有...
            0 0 5292
            分享
          • 一四年我在YX公司带测试团队,一个用例评审的会议上,一不小心超常发挥,结果卡在了一个用例设计方法上,印象非常深刻,当时的业务场景是支付方式的选择和优惠方案。在后来的工作中,也曾几次遇到需要选择合理的设计方法来写用例,不过每次在网上都是搜索了半天,也找不到令人满意的答案。很多简单的问题被复杂化,然后给出的解题思路更是令人百思不得其解。网络资源下,任何一个问题都不缺答案,更多的时候缺的是个让人一目了然的答案。测试前准备作为一个测试人员,软件测试的流程首先是要非常熟悉的,何时何地都能脱口而出,避免一切翻车的可能。需要注意的是流程没有唯一答案,具体由项目决定。所以给出的只是一个还算通用的参考流程。总结...
            0 0 1037
            分享
      • 51testing软件测试圈微信