故障案例 | 一次慢SQL优化分析全过程

自制小工具大大加速MySQL SQL语句优化(附源码) 引言 优化SQL,是DBA常见的工作之一。如何高效、快速地优化一条语句,是每个DBA经常要面对的一个问题。在日常的优化工作中,我发现有很多操作是在优化过程中必不可少的步骤。然而这些步骤重复性的执行,又会耗费DBA很多精力。于是萌发了自己编写小工具,提高优化效率的想法。 那选择何种语言来开发工具呢? 对于一名DBA来说,掌握一门语言配合自己的工作是非常必要的。相对于shell的简单、perl的飘逸... 阅读详情

欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答

  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。

客户发给我一个SQL,让我看看,为什么执行几分钟没有执行完。

我第一眼看到SQL的时候,我也觉得很简单,优化过程也比较简单,但是带来的分析过程与经验还是值得分享的。

SQL语句如下:

update ap_receive_benefits_log
  set orderstate= i_orderstate where
  requestid = i_orderid;

但是这个SQL执行时被严重阻塞了

file

但是这个SQL执行时被严重阻塞了

file

该SQL的执行计划

file

疑问1

发现执行计划key走的主键,但是细看行数,会发现是全表扫描了数据。

如果没有可用索引的情况下,执行计划为什么显示走的主键,而不是空的呢?

疑问2

这个SQL里的 i_orderid 字段会不会是表中的一个字段呢,如果不是字段,是哪里来的?

分析解决步骤如下

1.确认表中的数据量约75万,这个UPDATE语句每天都需要执行很多次。

2.查看表后,发现并没有 i_orderid 字段,很是奇怪。就想这个SQL怎么来的,让开发确认一下这个SQL的来源,我来确认执行计划。如果是mysql 5.6以上版本可以直接查看UPDATE的执行计划,发现这个语句没有利用任何索引。

3.开发找了半天,确认程序没有这个语句。怎么办,好像成了‘没人认领的死尸’,开发确认不了,只能自己查了。

4.使用 pt-query-digest 分析最近几个小时的慢查询,发现问题如下:

file

5.有一个存储过程执行次数很多,响应时间也是也是最大,分析此过程,查看该存储过程:

file

6.此存储过程执行情况:

file

7.到此,通过查看存储过程,可以确认发生阻塞的语句是过程里调用的,把存储过程发给开发,再次得到确认。

8.知道语句了,优化就简单了,先确认字段的基数(唯一性)。

file

9.加上索引 alter table ap_receive_benefits_log idx_requestId(requestId); 后,这个UPDATE就可以走索引了,问题解决。

再次回应上面的疑问

疑问1

为什么update执行计划没有索引情况下,使用的主键?

这个因为update语句查看执行计划的时候显示用的是主键,全表更新就是聚集索引,把这个update语句换成select,执行计划就是key显示的空。以下是测试的例子:

update的时候执行计划

file

转成select语句执行计划

file

疑问2

为什么show processlist显示的是字段或者是变量名,误导了我的思路?

测试一下:

创建过程并调用,延迟结果

file

查看processlist的结果

file

从测试结果看到,过程调用有变量传参的时候,在processlist中显示的变量传参名,而不是表的字段名。

Enjoy GreatSQL :)

文章推荐:

GreatSQL MGR FAQ https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA

万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预 https://mp.weixin.qq.com/s/07o1poO44zwQIvaJNKEoPA

『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》 https://mp.weixin.qq.com/s/u7k99y6i7riq7ScYs7ySnA

一条sql语句慢在哪之抓包分析 https://mp.weixin.qq.com/s/AYibbzl860D90rOeyjB6IQ

万答#15,都有哪些情况可能导致MGR服务无法启动 https://mp.weixin.qq.com/s/inSGpd0Q_XIl2Mb-VsvNsA

技术分享 | 为什么MGR一致性模式不推荐AFTER https://mp.weixin.qq.com/s/rNeq479RNsklY1BlfKOsYg

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee: https://gitee.com/GreatSQL/GreatSQL

GitHub: https://github.com/GreatSQL/GreatSQL

Bilibili: https://space.bilibili.com/1363850082/video

微信&QQ群: 可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群

QQ群:533341697 微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 发布!

如何定位并优化慢 SQL? 慢SQL识别与优化指南 本文系统介绍了慢SQL的定位与优化方法。首先定义了慢SQL的特征(执行超时、高资源消耗)及其业务影响(性能下降、连接耗尽)。其次详细讲解定位方案,包括MySQL/PostgreSQL的慢查询日志配置、EXPLAIN分析工具和监控系统集成。核心优化技术涵盖索引设计(最左前缀原则)、查询重写(子查询转JOIN)、分页优化(游标分页)和事务控制。高级策略涉及执行计划控制、统计信息管理和硬件优化。最后总结了面试必备知识点,强调通过"监控→分析→验证"的闭环流程进行系统性优 阅读详情

相关推荐

慢SQL治理分享

简介:这里的慢SQL指的是MySQL慢查询,是运行时间超过long_query_time值的SQL。真实的慢SQL通常会伴随着大量的行扫描、临时文件排序或者频繁的磁盘flush,直接影响就是磁盘IO升高,让正常的SQL变成了慢SQL,大面积执行超时。本文将和大家分享慢SQL的治理过程。 作者 | 史伟民 来源 | 阿里技术公众号 一 为什么要做这个事情 1 什么是慢SQL? 这里指的是MySQL慢查询,具体指运行时间超过long_query_time值的SQL。 我们常听常见的MySQL中有.

阿里云云栖号 1603

JAVA 日志异常没有打印堆栈信息问题

15:31:33 [http-nio-8091-exec-3] ERROR c.b.c.QaStandardRecordController - 查询记录详情失败:{} java.lang.NullPointerException: null 原因:发现服务器中日志文件只有异常,但是没有打印堆栈信息,找之前的日志文件发现有完整的堆栈异常信息 这个问题其实是跟JDK5引入的一个新特性有关,...

db3265613的专栏 2505

【KingbaseES】慢SQL分析与优化实战指南

本文详细介绍了KingbaseES数据库慢SQL的分析与优化实战指南。通过配置慢SQL监控、诊断SQL语句、索引优化和SQL重写等技巧,帮助开发者有效提升数据库性能。文章还提供了自动化监控方案和性能基准测试方法,确保优化效果可衡量。

weixin_42699679的博客 347

慢SQL分析与优化

整理了一下网上找到的部分慢sql的优化方法

qq_44819568的博客 1575

OceanBase中的慢 SQL 排查方法

本文将根据OceanBase的关键日志信息,提供多种分析路径与方法,帮助大家解决应用OceanBase时,慢查询等SQL性能问题

OceanBase分布式数据库的博客 2342

慢SQL是如何拖垮数据库的

通过现场的cloud dba监控也可以发现,innoDB缓存命中率为100%,不存在物理读的情况,也即可以认为数据库的高频数据都已全量存在于内存中了,通过查看数据库容量也可以佐证这个观点,数据+索引大小6G左右,未达到数据库实例配置的8G,所以实际情况是数据都存在于内存中了,并不会有多余的IO操作,CPU的性能全部都消耗在了大量的内存数据扫表(逻辑读)中 - 看现场平均扫描16w行数据;这个结论让我不禁想到了一个类似的场景,在线上vi打开服务器中大文件导致load飙高,应用不可用的问题。

Code365 1194

MySQL慢SQL监控与优化终极指南:让你的数据库飞起来

慢SQL是指执行时间超过设定阈值(通常0.5-2秒)的SQL语句。就像高速路上的事故车,它会阻塞整个交通流!fill:#333;color:#333;color:#333;fill:none;正常SQL快速执行慢SQL阻塞队列请求堆积系统崩溃慢SQL优化是"治未病"的艺术——最好的优化是在问题发生前预防!立即开启慢查询日志分析TOP 10慢SQL实施优化方案建立监控告警制定开发规范记住:数据库优化不是一次性的任务,而是持续的过程。现在就开始你的优化之旅吧!

全栈开发工程师 1675

慢sql分析,慢日志设置,慢Sql分析工具

慢sql分析,慢日志设置,慢Sql分析工具:mysql.slow_log 表日志的操作;慢 sql 的 explain 分析;explain 结果的 type 类型举例;索引失效举例;慢 sql 的 profile 分析;慢 sql 的 optimizer_trace 分析;慢日志文件清理;慢日志表的清理; 特别说明:文档为分析中的SQL语句举例说明。跟着实际操作理解就好,

MYSQL的慢SQL的优化

慢 SQL 即慢查询 SQL,指执行时间超过数据库预设阈值(如 MySQL 默认 10 秒,业务中通常设为 1 秒)、占用过多资源、执行效率低下的 SQL 语句。阈值可通过数据库参数自定义,是衡量 SQL 性能的基础标准。先监控:通过慢查询日志、监控工具定位问题 SQL;再分析:用EXPLAIN查看执行计划,判断是索引、语句还是架构问题;SQL 规范 → 索引优化 → 配置调优 → 架构拆分;持续验证:优化后对比执行时间、扫描行数,确保效果。

qq_74154205的博客 1570

MongoDB启动失败(service mongod start):Failed to unlink socket file /tmp/mongodb-27017.sock Unknown error

错误日志(/var/log/mongodb/mongo.log): 2019-09-16T06:00:00.251+0000 I CONTROL [main] ***** SERVER RESTARTED ***** 2019-09-16T06:00:00.253+0000 I CONTROL [main] Automatically disabling TLS 1.0, to force-e...

deantzzz的博客 1838

告别全局搜索!7种SRP-PHAT快速算法实战对比:哪个更适合你的麦克风阵列?

本文深入探讨了7种SRP-PHAT改进算法在声源定位领域的实战表现,包括SRC、CFRC、SPF等方案。通过对比计算效率、定位精度和环境鲁棒性等核心指标,为不同场景(如会议室、智能家居、工业机器人)提供算法选型建议,帮助工程师优化麦克风阵列性能。

weixin_42546392的博客 397

从管控角度谈慢SQL治理

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

生活不是只有眼前~ 2010

centos+apache+subversion+LDAP

yum install subversion 报错:[Errno 14] HTTP Error 416 - Requested Range Not Satisfiable 正在尝试其它镜像。 zaici

qq_41566366的博客 1544

一条慢SQL拖死整个系统

慢sql导致服务变慢

weixin_38972910的博客 1889

三级等保网络拓扑图实战:从零搭建符合标准的医院安全架构

本文详细阐述了如何从零开始设计并搭建符合三级等保标准的医院网络安全架构。文章基于“一个中心,三重防护”的核心框架,深入解析了医院网络分区设计、安全域划分、关键安全设备选型与配置等实战要点,并提供了绘制专业网络拓扑图的技巧与等保测评准备指南,旨在帮助医院IT人员系统化地构建既合规又实用的纵深防御体系。

weixin_29326909的博客 504

华为od 面试八股文_操作系统_01_含答案

华为od 面试八股文_操作系统_01_含答案

MISAYAONE的博客 3275

线上故障 | 一条 SQL引发的血案

欢迎关注公众号【sharedCode】致力于主流中间件的源码分析, 可以直接与我联系 事故现场 202-11-19 系统接收到大量的超时告警, 同时业务群里面也有很多客户反馈服务不可用。 开始排查 首先上grafana上面查看整体的服务状态, 从图中可以看出一点问题来,CPU几乎没有波动, tomcat线程数急剧上升, 系统的ops急剧下降。 这种是比较典型的资源阻塞类问题,为了印证这个想法,我们再看下当时的系统的GC情况 从上面的GC情况下,我们可以看出来,GC还是比较平稳的,整体的停顿市场也.

sharedCode源码交流 5432

我用C#实现上位机数据一键导出Excel:从乱码到百万行数据秒级导出的实战技巧

ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("日报表");// 1. 标题(合并单元格)worksheet.Cells["A1"].Value = $"产线日报表 -DateTimeNowToString// 2. 表头和数据(同上)worksheet.Cells["A3"].Value = "时间";// ...省略表头和数据填充// 3. 合计行(公式计算)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 712

openGauss数据库源码解析系列文章—— AI技术之“慢SQL发现”

上一篇介绍了第八章AI技术中“8.1 概述”及“8.2 自调优”的相关内容,本篇我们开启第八章 AI技术中“8.3 慢SQL发现”的相关精彩内容介绍。 8.3 慢SQL发现 基于历史SQL语句信息进行模型训练,并用训练好的模型进行SQL语句的预测,利用预测结果判断该SQL语句是否是潜在的慢SQL。当发现潜在的慢SQL后,开发者便可以进行针对性优化或者风险评估,以防业务上线后发生问题。 8.3.1 慢SQL发现的功能 上线业务预检测:上线一批新业务前,使用SQL诊断功能评估此次上线业务的预估执行时长,便于用户

Gauss松鼠会 4552

实现航迹关联的三种JPDA算法及Matlab代码

本文介绍了三种不同的JPDA算法实现航迹关联,并提供相应的Matlab代码。卡尔曼滤波是一种常用的状态估计算法,其基本思想是根据系统模型和观测数据,通过迭代计算来更新系统状态的估计值。基于卡尔曼滤波的JPDA算法是指在航迹关联问题中,同时利用卡尔曼滤波器的状态估计和概率假设,从而确定目标之间的关联关系。基于粒子滤波的JPDA算法是指在航迹关联问题中,通过抽样生成一组粒子(代表系统的不同可能状态),从而计算目标之间的关联概率。基于启发式搜索的JPDA算法是指在航迹关联问题中,通过多次迭代寻找最优关联方案。

code_welike的博客 1831

解决k8s核心组件calico pod资源不创建问题

解决k8s核心组件calico pod资源不创建问题 1.问题描述 由于K8S集群Master节点故障,导致calico网络组件虽然处于Running状态,但是一直无法准备就绪,如下图所示 calico-node-lpt7h运行在master节点,第一时间紧急处理方法就是将其pod删除,让K8S自动重建该pod,使整个集群快速恢复 但是就当我将calico-node-lpt7h pod删除后,该pod始终无法自建,就好像是从来没有这个pod似的 2.解决方法 期初排查时,我觉得可能是由于当前master

江晓龙的博客 4807

MySQL慢SQL问题分析与优化实战指南

数据库性能优化是系统稳定性的关键,其中慢SQL是最常见的性能瓶颈之一。慢SQL指执行时间超过阈值的查询语句,其原理在于低效的查询计划导致资源过度消耗。通过索引优化、SQL重写等技术手段,可以显著提升查询效率,这对高并发场景下的电商、金融等业务尤为重要。本文以MySQL为例,详细介绍如何通过慢查询日志、EXPLAIN分析等工具定位问题,并结合NineData等监控平台建立完整的慢SQL治理体系,帮助开发者从预防、监控到优化形成闭环解决方案。

weixin_33483304的博客 364

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql优化之慢SQL_MySQL慢SQL优化-阿里云开发者社区

基础知识慢SQL官方定义If a query takes longer than this many seconds, the server increments the Slow_queries status variable. If the slow query log is enabled, the query is logged to the slow query log file; Un...

weixin_39620370的博客 258

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

MySQL慢SQL优化方案详解:从诊断到根治的完整指南

通过监控系统捕获的真实案例:某电商平台在促销期间因未优化的GROUP BY语句导致每秒丢失23个订单,直接经济损失每小时超50万元。

学习编程的小羊的博客 753

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: 故障案例 | 慢SQL引发MySQL高可用切换排查全过程
下一篇: 万答#3,MGR最佳配置参考,PFS里的监测指标要全开吗,mysqld进程占用内存过高怎么排查
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值