首页 > 数据库 >从管控角度谈慢SQL治理

从管控角度谈慢SQL治理

时间:2024-09-09 17:03:03浏览次数:8  
标签:管控 数据库 查询 索引 时间 SQL 谈慢 执行

一、什么是慢SQL

慢SQL是指那些执行效率低下、响应时间长,导致用户等待时间变长和服务器资源利用率下降的SQL查询。那么,如何定义一个SQL查询是"慢"的呢?这不是一个绝对时间的问题,而是需要从多维度考量。

时间维度

最常见的定义慢SQL的方法是时间阈值。这个阈值可以根据不同的系统和性能要求设置。例如,一个查询如果在网页应用中执行时间超过2秒,或在数据分析系统中执行超过30秒,就可以被认为是慢的。

业务场景维度

单纯的时间阈值并不足以定义所有场景下的慢SQL。在不同的业务场景下,对性能的要求也不同。例如,对于在线交易系统,即便是几百毫秒的延迟也可能导致用户体验下降和收入损失,而对于后台数据分析任务,稍长的执行时间可能是可接受的。
另外,出于一些历史原因有的SQL查询可能非常复杂,需要同时关联非常多的表,使用一些复杂的函数、子查询,这样的SQL在项目初期由于业务数据量比较少,不会对数据库造成较大的压力,但是随着时间的积累以及业务的发展,这些SQL慢慢就会转变为慢SQL,对数据库的性能产生一定的影响。

资源使用维度

除了执行时间,SQL语句对系统资源的使用也是衡量其是否"慢"的一个重要维度。如果一个SQL查询导致了大量的CPU或内存消耗,甚至影响了其他查询的性能,那么它也可以被视为慢SQL。

频率和影响维度

有些SQL查询可能本身执行时间不长,但它们被频繁调用,累积起来对系统性能产生重大影响。另外,SQL执行的时间可能在系统空闲时无关紧要,但在高峰期可能会成为瓶颈。

用户体验维度

用户的感受也是定义慢SQL的一个重要维度。如果查询延迟导致用户界面卡顿,影响了用户的操作流程,即使查询本身不算太慢,用户体验也会告诉我们它是“慢”的。

因此,慢SQL的定义是多维度的,它需要从执行时间、业务场景、资源消耗、频率及影响以及用户体验等多方面的考量。

二、慢SQL产生原因

产生慢SQL的原因有很多,以下只是列出常见原因。

1.硬件问题
如果数据库本身的性能压力比较大,资源比较紧张,CPU占用率或者IO利用率很高,这时会导致所有的语句执行起来都比较慢。当然压力大的原因又有很多种,比如服务器参数设置(my.cnf)、磁盘空间满、内存不足、网速问题等等。

2.无索引、索引失效导致
表的数据量越大,如果SQL又没有走索引,很容易发生查询慢的问题。所以对于大数据量的查询,需要建立适合的索引来优化查询。虽然我们很多时候建立了索引,但在一些特定的场景下,索引还有可能会失效,所以索引失效也是导致慢查询的主要原因之一。

3.锁等待
执行SQL的时候,如遇到表锁或者行锁,只能等待锁被释放,就会导致慢SQL。

4.不恰当的 SQL 语句
使用不恰当的 SQL 语句也是慢 SQL 最常见的诱因之一 :在大数据表中使用分页查询、多表join查询,以及对非索引字段进行排序等等。

三、慢SQL危害

1. 资源占用增加,影响其他请求响应时间
每个SQL执行都需要消耗一定的I/O资源,SQL执行的快慢,决定资源被占用时间的长短。假设总资源是10,有一条慢SQL占用了3的资源共计1分钟。那么在这1分钟时间内,其他SQL能够分配的资源总量就是7,如此循环,当资源分配完的时候,所有新的SQL执行将会排队等待。

2. 拖垮系统,引发故障
慢SQL占用数据库连接的时间长,如果有大量慢SQL查询同时执行,可能会导致数据库连接池的连接被全部占用,并导致数据连接池打满、缓冲区溢出等问题,使数据库无法响应其他请求,同时占用mysql大量内存,严重时会导致服务器直接挂掉,整个系统直接瘫痪。

3. 数据不一致问题
慢SQL造成数据库幻读、不可重复读的概率更大,假设该慢SQL是一个更新操作但因执行时间过长未提交,而另一条SQL也在更新数据并且已提交,用户再次查询的时候,看到的数据可能与实际结果不符。此外慢SQL的执行时间过长,可能会导致应用的进程因超时被kill,无法返回结果到客户端。

4. 影响用户体验
SQL的执行时间越长,系统的响应时间延迟,就会导致用户操作界面卡顿,影响用户体验。

四、从管控角度谈慢SQL优化

关于慢SQL的优化网上已经有大量资料可以参考,这里不再阐述,下面从管控角度谈如何对慢SQL进行整治。作为横向的风险隐患治理团队,为了对公司内部多个部门多个系统进行慢SQL治理,我们总结了几点经验,仅供参考。

1.善用工具发现慢SQL
目前发现慢SQL的工具有很多,很多企业也打造了自己的定制化慢SQL工具,当然像Mysql也有自己的慢查询日志功能可以用来分析慢SQL,不过功能比较粗糙,慢查询日志杂乱无序,无法反映系统当前状况以及SQL对系统的影响,不方便长期跟踪治理。
而通过慢SQL分析平台,对系统中的慢SQL进行统计、分析、分组,能够准确反映每个慢SQL对系统的影响,实时展示当前系统数据库的慢SQL情况,并可以对慢SQL风险进行数字化打分,方便我们对慢SQL分级治理。
image.png

2.慢SQL告警
由于慢SQL原因的复杂性和多样性,出现一条慢SQL就发告警显然是不合理,且很多时候慢SQL是结果而非原因,我们的做法是监控每五分钟的慢查询数量环比增长情况,各系统根据实际情况自行设置不同的阈值,此外要求各系统每次发版之后重点检查慢SQL新增情况。

3.分级治理、长期追踪
慢SQL治理是一个需要长期坚持做的事情,我们的做法是每月取数据库主机cpu使用率TOP10数据库清单,拉出top清单中的TOP5慢SQL(根据评分排序),并组织相关系统进行优化,对比优化前后的负载情况,形成成效,最终实现解决慢查询从“被动”到“主动”的完美转换。

标签:管控,数据库,查询,索引,时间,SQL,谈慢,执行
From: https://www.cnblogs.com/busijo/p/18404891

相关文章

  • 20240909_155524 mysql 三种变量
    什么是变量标识数据的标识符,就是变量变量是标识数据的mysql中的三种变量系统变量自定义变量局部变量系统变量查看所有系统变量showvariables;根据系统变量名查看它的值select@@系统变量名select@@autocommit修改系统变量的值set系统变量名=值setautocommit......
  • 如何进行文件外发管控?如何限制企业内部文件外发?一文揭晓答案
    文件外发管控的重要性:文件外发管控至关重要,它直接关系到企业信息安全与合规性。通过严格管控文件外发行为,企业能有效防止敏感信息泄露,保护核心数据资产不受侵害。这不仅有助于维护企业声誉和客户信任,还能确保业务连续性和竞争力。同时,符合法律法规要求,避免法律风险和罚款。因......
  • 企业怎样管控员工外发文件|企业如何限制内部文件被随意外发?
    在当今数字化时代,企业内部文件的安全管理成为了企业运营中不可或缺的一环。随着员工在日常工作中频繁地使用电子邮件、云存储、即时通讯工具等渠道进行信息交流和文件共享,如何有效管控员工外发文件,防止内部文件被随意外发,成为企业面临的重要挑战。本文探讨企业如何构建一套全......
  • 20240904_192638 mysql 填空题 存储过程进阶
    定义一个存储过程的形参,它接收数据,参数名为id,为int类型inidint定义一个存储过程的形参,它返回数据,参数名为name,是varchar(5)类型outnamevarchar(5)定义一个存储过程的形参,它一边接收数据一边返回数据,参数名为num,是int类型inoutnumint声明一个名为info的游标,保存查询teac......
  • centos7.9安装mysql8.0.39
    1.添加MySQLYum仓库首先,需要下载并安装MySQLYum仓库RPM包:sudorpm-Uvhhttps://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm2.更新Yum缓存安装完Yum仓库后,更新Yum缓存:sudoyumcleanallsudoyummakecache3.安装MySQL 现在可以......
  • 基于Java实现的大学生就业服务平台设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的摄影跟拍预订管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的乒乓球预约管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • 基于Java实现的私人健身与教练预约管理系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.选题推荐毕设案例8.系统测试8.1系统测试的目的8.2系统功能测试9.代码参考10.为什么选择我?11.获取源码1.前言......
  • Redis缓存和Mysql数据一致性问题
            在高并发环境下,保持Redis缓存和MySQL数据库的数据一致性是一个复杂但至关重要的任务。下面是对这一问题的详细讲解,并结合PHP代码示例来展示如何解决这些一致性问题。问题背景Redis缓存和MySQL数据库的主要挑战在于:缓存和数据库之间的延迟:在缓存更......