MySQL的慢sql

  1. 什么是慢sql

    1. 每执行一次sql,数据库除了会返回执行结果以外,还会返回sql执行耗时,以mysql数据库为例,当我们开启了慢sql监控开关后,默认配置下,当sql的执行时间大于10s,会被记录到慢sql的日志文件中
    2. 这个值可以重新设置,生产环境慢sql一般设置为0.1-0.2s,当我们将其设置为0.2s时。当前数据库所有sql的执行时长超过0.2s的都会被视为慢sql
  2. 慢sql的危害

    1. 当出现慢查询时,DDL操作都会被阻塞,也就是说创建表,修改表,删除表,执行数据备份等操作都需要等待,这对实时备份重要数据的系统来说是不可容忍的
    2. 慢查询可能会占用mysql大量的内存,严重的时候会导致应用的进程因超时被kill,无法返回结果给到客户端
    3. 造成数据库幻读,不可重复读的概率更大,假设该慢sql是一个更新操作,但因执行时间过长未提交,而另一条sql也在更新数据并且已经提交,当用户再次查询的时候,看到的数据可能与实际结果不符
    4. 严重影响用户体验:sql的执行时间越长,页面加载数据耗时也就越长
  3. 如何定位慢sql

    1. 开启慢sql监控

      1. show variables like ‘slow_query_log%’; 查询是否开启慢sql监控

        1. show_query_log OFF 默认是关闭状态
        2. slow_query_log_file /var/lib/mysql/ecs-203056-slow.log 慢sql的日志存储文件
      2. set global slow_query_log = 1 ;

        1. 开启慢sql查询,执行成功后,客户端需要重新连接才能生效
        2. 如果想关闭慢sql监控,将其配置为0就可以了
        3. 当服务器重启之后,当前配置会失效
      3. 配置慢sql阈值

        1. 默认的慢sql的阈值是10s,
          1. show variable like 'long_query_time1; 查询慢sql阈值
          2. long_query_time 10 默认是10s
        2. set global long_query_time = 0.2;
          1. 将慢sql阈值配置为0.2秒’
          2. 然后退出客户端,重新连接服务器,就生效了
          3. 当服务器重启之后,当前配置会失效
      4. 永久开启慢sql监控

        1. 以上的操作,当服务器不重启会一直有效,但是当服务器一旦重启之后,配置就会失效,如果想要永久生效,可以通过修改全局配置文件my.cnf使之永久生效

        2. 打开my.cnf配置文件,添加如下配置变量

          1. [mysqld]
            slow_query_log = ON
            slow_query_log_file = /var/lib/mysql/ecs-203056-slow.log
            long_query_time = 1
            
          2. 重启mysql服务器

          3. systemctl restart mysqld
            
      5. 慢sql监控

        1. 慢SQL日志内容详解

          1. Time:表示客户端查询时间
          2. root[root]表示客户端查询用户和IP
          3. Query_time:表示查询耗时
          4. Lock_time:表示等待table lock的时间,注意innodb的行锁等待是不会反应在这里的
          5. Rows_sent:表示返回了多少行记录(结果集)
          6. Rows_examined:表示检查了多少条记录
        2. 除此之外,我们还可以借助mysqldumpslow命令工具,分析慢sql的数据情况,可以通过如下参数进行组合分析

          1. -s         表示按何种方式排序,支持的参数如下
                        al: 平均锁定时间
                        ar: 平均返回记录数
                        at: 平均查询时间
                        c: 访问次数
                        l: 锁定时间
                        r: 返回记录
                        t: 查询时间
            -t NUM       返回前面多少条的数据
            -g PATTERN   后边搭配一个正则匹配模式,大小写不敏感
            
        3. 常见用法如下

          1. 查询返回记录集最多的10个sql

            1. mysqldumpslow -s r -t 10 /var/lib/mysql/ecs-203056-slow.log
              
          2. 查询访问次数最多的10个sql

            1. mysqldumpslow -s c -t 10 /var/lib/mysql/ecs-203056-slow.log
              
          3. 查询按照时间排序的前10条里面含有做链接的查询语句

            1. mysqldumpslow -s t -t 10 -g "LEFT JOIN" /var/lib/mysql/ecs-203056-slow.log
              
      6. 慢sql是怎么发生的

        1. 在这里插入图片描述

        2. 一条sql语句执行时,总结起来大概分为以下几个步骤

          1. 若查询缓存打开则会优先查询缓存,若命中则直接返回结果给客户端
          2. 若缓存未命中,此时mysql需要搞清楚这条语句需要做什么,则通过分析器进行词法分析,语法分析
          3. 搞清楚要做什么之后,mysql会通过优化器对sql进行优化,生成一个最优的执行计划
          4. 最后通过执行器与存储引擎提供的接口进行交互,将结果返回给客户端
        3. 在mysql执行过程中,优化器可能会对我们即将要执行的sql进行改造,改造思路如下

          1. 根据搜索条件,找出sql中所有可能使用的索引
          2. 然后计算全表扫描的成本开销
          3. 接着计算使用不同索引执行查询的成本开销
          4. 最后会对比各种执行方案的成本开销,找出开销值最小的那一个
        4. 影响成本开销值的计算,主要是IO成本和CPU成本这两个指标

        5. 从IO视角看

          1. 当表的数据量越大,需要的IO次数也就越多
          2. 从磁盘读取数据比缓存读取数据,IO消耗的时间更多
          3. 全表扫描比通过索引快速查找,IO消耗的时间和次数更多
        6. 从CPU视角看

          1. 当sql中有排序,子查询等复杂的操作时,CPU需要先把数据存到临时表中,在对数据进行加工,需要的CPU资源更多
          2. 全表扫描相比于通过索引快速查找,需要的CPU资源也更多
        7. 在没有开启缓存的情况下,当表的数据量越大,如果sql又没有走索引,很容易发生查询慢的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/783303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AI资讯】可以媲美GPT-SoVITS的低显存开源文本转语音模型Fish Speech

Fish Speech是一款由fishaudio开发的全新文本转语音工具,支持中英日三种语言,语音处理接近人类水平,使用Flash-Attn算法处理大规模数据,提供高效、准确、稳定的TTS体验。 Fish Audio

【MySQL】MySQL连接池原理与简易网站数据流动是如何进行

MySQL连接池原理与简易网站数据流动是如何进行 1.MySQL连接池原理2.简易网站数据流动是如何进行 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃&#x1f60…

Avalonia 常用控件四 Text Controls

1、AutoCompleteBox <StackPanel Margin"20"><TextBlock Margin"0 5">选择一种动物</TextBlock><AutoCompleteBox x:Name"animals" FilterMode"StartsWith"/><!--AutoCompleteBox:Items:要匹配的项目列表。…

如何检查 Windows 版本?这几种方法都可以查看

设置界面查看 要想查看电脑安装的 Windows 版本我们可以在设置界面进行查看&#xff0c;打开设置界面之后点击系统。 接下来在左边框中往下滑动&#xff0c;点击关于选项&#xff0c;然后在右边框中往下滑动找到 Windows 规格模块&#xff0c;在这里就可以看见安装的 Windows …

windows sshkeygen 多平台添加配置

文章目录 .ssh目录生成新的ssh配置添加公钥到仓库验证 .ssh目录 windows下一般为&#xff1a;C:\Users\15237.ssh &#xff0c;其中“15237”为当前登录用户 生成新的ssh .ssh目录下打开“Git Bash Here”&#xff08;如果没有&#xff0c;先安装 Git 软件&#xff09; 执行…

学会python——用python生成一个验证码(python实例二十)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.生成验证码 3.1 代码构思 3.2 代码实例 3.3 运行如果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性&…

无人直播怎么玩,一文带你了解AI小姐姐自动换装玩法

最近经常有小伙伴问我 就是像这种&#xff0c;一刷礼物&#xff0c;小姐姐就换装的视频到底该怎么做 今天就来教大家 如何来制作这种直播视频 第一步&#xff1a;搭建OBS 1、设置屏幕分辨率&#xff1a; 背景&#xff1a;因为一般初始状态&#xff0c;屏幕是横屏的&#xf…

从零开始的python学习生活1

python函数的对返回值 本来多个return是不行的 这种语法就能接受多个返回值 def hanshu():return 1,"hello",True x,y,z hanshu() print(x) print(y) print(z)函数的多种传参方式 提前说明白了顺序就无所谓了 关键字传递一个传递参数&#xff0c;一个传递键值…

04-Haproxy搭建Web群集

理论讲解 Haproxy 是目前比较流行的一种群集调度工具&#xff0c;同类群集调度工具有很多&#xff0c;如LVS 和Nginx。相比较而言&#xff0c;LVS 性能最好&#xff0c;但是搭建相对复杂:Nginx的upstream模块支持群集功能&#xff0c;但是对群集节点健康检查功能不强&#xff…

人员定位系统于不同场景的实际应用

人员定位系统的应用&#xff0c;尽管还没有做到大范围的普及&#xff0c;但是这一系统在不同企业&#xff0c;不同单位的实际应用效果还是很好的&#xff0c;所以人员定位系统也应用于不同场景当中了&#xff0c;那么&#xff0c;本文就来讲讲这一系统在不同场景的实际应用。 人…

CV每日论文--2024.7.3

1、HouseCrafter: Lifting Floorplans to 3D Scenes with 2D Diffusion Model 中文标题&#xff1a;HouseCrafter&#xff1a;使用 2D 扩散模型将平面图提升为 3D 场景 简介&#xff1a;HouseCrafter是一种新的方法,能够将平面图转换为完整的大型3D室内场景(如房屋)。它的关键…

软件架构之系统性能评价

软件架构之系统性能评价 第 5 章 系统性能评价5.1 性能指标5.1.1 计算机 5.1.2 网络5.3 性能设计5.3.1 阿姆达尔解决方案5.3.2 负载均衡 5.4 性能评估5.4.1 基准测试程序5.4.2 Web 服务器的性能评估5.4.3 系统监视 第 5 章 系统性能评价 系统性能是一个系统提供给用户的众多性…

80+ ChatGPT 文献综述指令

进行文献综述通常似乎是一项艰巨的任务。它是学术和研究工作的重要组成部分&#xff0c;涉及对先前发表的与特定主题相关的研究进行全面和批判性分析。目标是深入了解该主题的知识状况&#xff0c;找出差距&#xff0c;并为进一步研究奠定基础。 传统上&#xff0c;文献综述是…

idm 支持断点续传吗 idm 断点续传如何使用 idm断点续传怎么解决 idm下载中断后无法继续下载

断点续传功能&#xff0c;让我再也不会惧怕下载大型文件。在断点续传的帮助下&#xff0c;用户可以随时暂停下载任务&#xff0c;并在空闲时继续之前的下载进程。下载文件不惧网络波动&#xff0c;断点续传让下载过程更稳定。有关 idm 支持断点续传吗&#xff0c;idm 断点续传如…

Java:String 类

文章目录 一、概念二、创建字符串三、字符串长度四、连接字符串五、比较字符串 一、概念 字符串广泛应用 在 Java 编程中&#xff0c;在 Java 中字符串属于对象&#xff0c;Java 提供了 String 类来创建和操作字符串。 二、创建字符串 创建字符串最简单的方式如下: // 直接创…

C++ 面试宝典之:空类大小究竟是不是 0?

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/pD4bIjX2kDzo8gbYRPktPQ 首先&#xff0c;空类是什么&#xff1f;空类指的是不包含任何数据成员的类&#xff0c;但可能包含方法成员。 实例化时…

苹果电脑压缩软件哪个好用一些? mac电脑用什么压缩软件 mac电脑压缩文件怎么设置密码

压缩软件是Mac电脑必不可少的工具&#xff0c;虽然Mac系统自带了一款“归档实用工具”&#xff0c;但是其功能实在匮乏&#xff0c;若你需要加密压缩文件或者把文件压缩成指定格式&#xff0c;那么该工具无法满足你的需求。Mac用户应该怎么选择压缩软件呢&#xff1f;本文就来告…

git 文件没有修改,但一直提示有0行改动,还原也不行

查看文件修改内容 原来是文件的模式(读写可执行权限)发生了变化,内容本是没有变化. 怎么解决 git config --add core.filemode false忽略文件模式

java中反射(Reflection)的4个作用

java中反射&#xff08;Reflection&#xff09;的4个作用 作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断任意一个类所具有的成员变量和方法作用4、在运行时调用任意一个对象的方法总结 &#x1f496;The Begin&#x1f496;…

Excel 宏录制与VBA编程 ——VBA编程技巧篇二 (合并内容相同连续单元格、取消合并单元格并在每个单元格中保留内容)

1、合并内容相同的连续单元格 如果需要合并如图所示的工作表中B列中部门相同的连续单元格 VBA代码&#xff1a; Sub Mergerng()Dim IntRow As IntegerDim i As IntegerApplication.DisplayAlerts FalseWith Sheet1IntRow .Range("A65536").End(xlUp).RowFor i In…