MySQL的慢sql

news2024/10/6 7:42:15
  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.coloradmin.cn/o/1905277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

曹操的五色棋布阵 - 工厂方法模式

定场诗 “兵无常势,水无常形,能因敌变化而取胜者,谓之神。” 在三国的战场上,兵法如棋,布阵如画。曹操的五色棋布阵,不正是今日软件设计中工厂方法模式的绝妙写照吗?让我们从这个神奇的布阵之…

GStreamer学习5----probe数据探测

参考资料: gstreamer中如何使用probe(探针)获取帧数据_gstreamer 视频编码时获取视频关键帧信息-CSDN博客 Gstreamer中可以使用AppSink作为一个分支来查看管线中的数据,还可以使用probe去处理。 在GStreamer中,probe…

【LeetCode】螺旋矩阵

目录 一、题目二、解法完整代码 一、题目 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2&…

第六十周:文献精读

目录 摘要 Abstract 文献阅读:可解释多水平时间序列预测的时间融合Transformer 一、多水平预测(Multi-horizon forecasting) 二、过去相关研究 三、现存问题 四、提出方法 五、模型架构 1、门控残差网络(GRN) 2、变量选择网络 3、…

昇思25天学习打卡营第07天|函数式自动微分

神经网络的训练主要使用反向传播算法,模型预测值(logits)与正确标签(label)送入损失函数(loss function)获得loss,然后进行反向传播计算,求得梯度(gradients&…

Ubuntu 20.04下多版本CUDA的安装与切换 超详细教程

目录 前言一、安装 CUDA1.找到所需版本对应命令2.下载 .run 文件3.安装 CUDA4.配置环境变量4.1 写入环境变量4.2 软连接 5.验证安装 二、安装 cudnn1.下载 cudnn2.解压文件3.替换文件4.验证安装 三、切换 CUDA 版本1.切换版本2.检查版本 前言 当我们复现代码时,总会…

孟德尔随机化与痛风3

写在前面 检索检索,刚好发现一篇分区还挺高,但结果内容看上去还挺熟悉的文章,特记录一下。 文章 Exploring the mechanism underlying hyperuricemia using comprehensive research on multi-omics Sci Rep IF:3.8中科院分区:2区 综合性期…

从一个(模型设计的)想法到完成模型验证的步骤

从有一个大型语言模型(LLM)设计的想法到完成该想法的验证,可以遵循以下实践步骤: 需求分析: 明确模型的目的和应用场景。确定所需的语言类型、模型大小和性能要求。分析目标用户群体和使用环境。 文献调研&#xff1a…

前端html面试常见问题

前端html面试常见问题 1. !DOCTYPE (文档类型)的作用2. meta标签3. 对 HTML 语义化 的理解?语义元素有哪些?语义化的优点4. HTML中 title 、alt 属性的区别5. src、href 、url 之间的区别6. script标签中的 async、defer 的区别7. 行内元素、块级元素、空…

运维系列.Nginx:自定义错误页面

运维系列 Nginx:自定义错误页面 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/…

mac|Mysql WorkBench 或终端 导入 .sql文件

选择Open SQL Script导入文件 在第一行加入use 你的schema名字,相当于选择了这个schema 点击运行即可将sql文件导入database 看到下面成功了即可 这时候可以看看左侧的目标database中有没有成功导入table,如果没有看到的话,可以点一下右上角的…

【算法笔记自学】第 8 章 提高篇(2)——搜索专题

8.1深度优先搜索&#xff08;DFS&#xff09; #include <cstdio>const int MAXN 5; int n, m, maze[MAXN][MAXN]; bool visited[MAXN][MAXN] {false}; int counter 0;const int MAXD 4; int dx[MAXD] {0, 0, 1, -1}; int dy[MAXD] {1, -1, 0, 0};bool isValid(int …

执行力不足是因为选择模糊

选择模糊&#xff1a;执行力不足的根源 选择模糊是指在面对多个选项时&#xff0c;缺乏明确的目标和方向。这种模糊感会导致犹豫不决&#xff0c;进而影响我们的执行力。 选择模糊的表现&#xff1a; 目标不明确&#xff0c;不知道应该做什么。优先级混乱&#xff0c;不清楚…

【持续集成_03课_Jenkins生成Allure报告及Sonar静态扫描】

1、 一、构建之后的配置 1、安装allure插件 安装好之后&#xff0c;可以在这里搜到已经安装的 2、配置allure的allure-commandline 正常配置&#xff0c;是要么在工具里配置&#xff0c;要么在系统里配置 allure-commandline是在工具里进行配置 两种方式进行配置 1&#xff…

人工智能、机器学习、神经网络、深度学习和卷积神经网络的概念和关系

人工智能&#xff08;Artificial Intelligence&#xff0c;缩写为AI&#xff09;--又称为机器智能&#xff0c;是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是智能学科重要的组成部分&#xff0c;它企图了解智能的实质…

[护网训练]原创应急响应靶机整理集合

前言 目前已经出了很多应急响应靶机了&#xff0c;有意愿的时间&#xff0c;或者正在准备国护的师傅&#xff0c;可以尝试着做一做已知的应急响应靶机。 关于后期&#xff1a; 后期的应急响应会偏向拓扑化&#xff0c;不再是单单一台机器&#xff0c;也会慢慢完善整体制度。…

基于Java的企业客户信息反馈平台

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; Java MySQL B/S架构 SpringBoot框架 工具&#xff1a; Eclipse、MySQL环境配置工具、浏览…

【每日一练】python算数练习题(函数.随机.判断综合运用)

""" 幼儿园加减法练习题 答对点赞表情&#xff0c;答错炸弹表情 表情随机出现 如果全答对有大奖 """ import random df0 #定义答对函数 def dd():global dfdf10bq["&#x1f339;&#x1f339;&#x1f339;","&#x1f389;&…

试用笔记之-汇通窗口颜色显示软件(颜色值可供Delphi编程用)

首先下载汇通窗口颜色显示软件 http://www.htsoft.com.cn/download/wdspy.rar 通过获得句柄颜色&#xff0c;显示Delphi颜色值和HTML颜色值

【74LS163做24进制计数器】2021-11-19

缘由用74LS163做24进制计数器-其他-CSDN问答,仿真multisim两个74LS163芯片如何构成47进制计数器-吐槽问答-CSDN问答 参考74ls163中文资料汇总&#xff08;74ls163引脚图及功能_内部结构图及应用电路&#xff09; - 电子发烧友网