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.rhkb.cn/news/371768.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人脸检测(Python)

目录 环境: 初始化摄像头: 初始化FaceDetector对象: 获取摄像头帧: 获取数据: 绘制数据: 显示图像: 完整代码: 环境: cvzone库:cvzone是一个基于…

RabbitMQ中常用的三种交换机【Fanout、Direct、Topic】

目录 1、引入 2、Fanout交换机 案例:利用SpringAMQP演示Fanout交换机的使用 3、Direct交换机 案例:利用SpringAMQP演示Direct交换机的使用 4、Topic交换机 案例:利用SpringAMQP演示Topic交换机的使用 1、引入 真实的生产环境都会经过e…

【论文阅读】VASA-1: Lifelike Audio-Driven Talking FacesGenerated in Real Time

整体框架。不直接生成视频帧,而是在潜在空间中生成整体面部动态和头部运动,条件是音频和其他信号。给定这些运动潜在编码,通过面部解码器生成视频帧,还接受从输入图像中提取的外观和身份特征作为输入。 构建了一个面部潜在空间并…

大连外贸建站公司wordpress主题模板

Robonaut萝卜纳特WP外贸站模板 适合用于工业机器人公司出口做外贸搭建公司官方网站使用的WordPress模板。 https://www.jianzhanpress.com/?p7091 优衣裳WordPress外贸建站模板 简洁的wordpress外贸独立站模板,适合服装、衣服、制衣外贸公司搭建公司官方网站使用…

视频翻译英文的软件有哪些?打破语言障碍就用这5个

打算趁着暑假假期悄悄努力惊艳所有人的小伙伴在哪呢~ 相信不少朋友自学都会首选在家看网课,不过有时候面对全英的外语课程,难免总会听得一头雾水~ 但其实这个问题很好解决!码好以下这5款视频翻译工具,语言障碍的问题也就都迎刃而…

打破中国算力瓶颈的暴雨模式

6月27日,一场汇聚政府领导、人工智能领域顶尖专家学者和行业领军代表的高峰论坛—“算力中国高峰论坛”在北京清华科技园紫荆会议中心盛大举行。本次论坛由庆阳市人民政府、甘肃省人工智能与算力技术重点实验室共同举办,旨在加快探索科技前沿&#xff0c…

Python 算法交易实验76 QTV200日常推进

说明 最近实在太忙, 没太有空推进这个项目,我想还是尽量抽一点点时间推进具体的工程,然后更多的还是用碎片化的时间从整体上对qtv200进行设计完善。有些结构的问题其实是需要理清的,例如: 1 要先基于原始数据进行描述…

下载linux的吐槽

本来这几天放假了,想下一个linux玩一玩 教程(我就是根据这个教程进行下载的,但是呢在进行修改BIOS 模式的 地方遇见了困难,也许是电脑修过的原因,我狂按F12 以及 FnF12都没有BIOS设置,只有一个让我选择用w…

puppeteer 爬虫初探

1. puppeteer 和 puppeteer-core 安装 puppeteer 会默认下载一个最新版本的 chrome 浏览器; 安装 puppeteer-core ,不会安装 chrome, 若要程序打开浏览器运行时,需手动指定电脑系统安装的 chrome 浏览器路径; 2. puppeteer-core …

【Linux】网络新手村

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 引言 今天,我们就开始学习Linux网络相关的内容。这篇博客作为Linux网络板块的第一篇博客看,我们首先要带着大家明白Linux网络的一些名词的概念,为之后的学习扫清障碍。然后我…

权限控制权限控制权限控制权限控制权限控制

1.权限的分类 视频学习:https://www.bilibili.com/video/BV15Q4y1K79c/?spm_id_from333.337.search-card.all.click&vd_source386b4f5aae076490e1ad9b863a467f37 1.1 后端权限 1. 后端如何知道该请求是哪个用户发过来的 可以根据 cookie、session、token&a…

开源六轴协作机械臂myCobot 280接入GPT4大模型!实现更复杂和智能化的任务

本文已经或者同济子豪兄作者授权对文章进行编辑和转载 引言 随着人工智能和机器人技术的快速发展,机械臂在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI,机械臂能够实现更加复杂和智能化的任务,提升了人机协作的效率…

easyexcel使用小结-未完待续

官网&#xff1a;https://easyexcel.opensource.alibaba.com/docs/current/ <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.1</version></dependency>一、读 1.1简单读 Getter…

Android-卷积神经网络(Convolutional Neural Network, CNN)

一个复杂且在Android开发中常见的算法是图像处理中的卷积神经网络(Convolutional Neural Network, CNN)。CNN被广泛用于图像识别、物体检测和图像分割等任务,其复杂性在于需要处理大量的图像数据、复杂的神经网络结构和高效的计算。 1. 卷积操作(Convolution) 数学原理:…

stm32——外部中断EXTI

上回书说到定时器的级联&#xff0c;今天来谈谈外部中断EXTI。我使用的是STM32F103C8T6的学习板。仅供大家参考。 什么是中断呢&#xff1f;中断是指计算机在执行程序的过程中&#xff0c;当出现某些异常情况或特殊事件&#xff08;例如外部设备请求、定时时间到达、程序错误等…

LeetCode 744, 49, 207

目录 744. 寻找比目标字母大的最小字母题目链接标签思路代码 49. 字母异位词分组题目链接标签思路代码 207. 课程表题目链接标签思路代码 744. 寻找比目标字母大的最小字母 题目链接 744. 寻找比目标字母大的最小字母 标签 数组 二分查找 思路 本题比 基础二分查找 难的一…

Java求解百钱买百鸡问题(课堂实例2)

目录 &#x1f495;&#x1f495;引言&#x1f495;&#x1f495; &#x1f60d;&#x1f60d;点关注编程梦想家&#xff08;大学生版&#xff09;-CSDN博客不迷路&#x1f495;&#x1f495; 一、问题背景----百鸡百钱_百度百科 (baidu.com) &#x1d465;&#x1d466;&a…

黑马点评报错@user_script:17: user_script:17: attempt to compare nil with number

后面发现是需要预先写入缓存seckill:stock:11&#xff0c;其中11是优惠券id 我数据库里面是11 &#xff0c;这里redis里面也写了11之后就好使了

html+css+JavaScript 实现两个输入框的反转动画

开发时遇到了一个输入框交换的动画 做完之后觉得页面上加些许过渡或动画&#xff0c;其变化虽小&#xff0c;却能极大的提升页面质感&#xff0c;给人一种顺畅、丝滑的视觉体验。它的实现过程主要是通过css中的transition和animation来实现的。平时在开发的时候增加一些动画效…

python安装PyTorch+cuda

1,最终结果 import torchprint(torch.cuda.is_available()) #显示True&#xff0c;则安装成功 print(torch.__version__)#打印当前PyTorch版本号。 print(torch.version.cuda)#打印当前CUDA版本号。 print(torch.backends.cudnn.version())# 打印当前cuDNN版本号。 print(torc…