那条突然变慢的 SQL,到底经历了什么?

最佳实践:TiDB 业务读变慢分析处理 了解 TiDB 的读过程,有助于我们掌握数据库的底层执行原理,遇到问题时可以快速定位和分析原因,也能引导我们更好地使用数据库,发挥其最好的性能。TiDB Dashboard 是对用户非常友好的一个官方工具,它使得我们分析慢查询 SQL 变得更轻松和快速,大大降低了问题处理的时间,强烈建议使用。 阅读详情

凌晨三点,运维群炸了。

一个跑了大半年、稳如老狗的查询,就在昨晚数据库例行重启之后,慢了整整 40 倍。

代码一行没改,数据量也没暴涨,可它就是慢了。有人怀疑是缓存,有人怀疑是网络,折腾到天亮,真相才浮出水面——

执行计划,变了。

优化器在重启后重新"思考"了一遍,然后挑了一条看起来更聪明、实际上更慢的路。而这一切,没有任何日志、没有任何告警,它就那么悄无声息地发生了。

一个防不胜防的"无声杀手"

这种现象,业内叫执行计划漂移。

它是数据库世界里最难缠的性能问题之一:不报错、不告警,你永远不知道它什么时候来,也不知道它动了哪条 SQL。等到业务报警、CPU 飙红,往往已经错过了最佳排查时机,只能靠经验一条条 SQL 去猜。

说白了,过去我们面对执行计划退化,手里缺了四样东西:

  • 升级/重启后计划漂移了,看不见
  • SQL 计划变了,却定位不到是哪条、变成了啥样
  • 同一条 SQL 优化前后的效果,没法量化
  • 想拿历史计划做对比,根本没有数据

GreatSQL 8.4.4-5 决定,给这个"无声杀手"装上监控探头。

思路朴素,却直击要害

新特性「执行计划变更异常捕获」的做法说穿了很简单——对付这种突然变慢的SQL,GreatSQL 8.4.4-5的做法是给每条 SQL 的执行计划留一份"档案",然后定期查岗。:

数据库运行时,它以 SQL Digest 为维度,持续把每条 SQL 当前走的执行路径记录成基线;到了重启后、或运行一段时间后,拿新旧两份"档案"一比对,哪条计划"变心"了、cost 变高了,立刻标记出来,连带对应的存疑 SQL 一起摆到你面
前。

从"事后靠猜",一步跨到"事前预警"。

两步启用,几乎零负担

它以插件形式工作,装个插件、开俩开关就能跑:

-- 安装插件
INSTALL PLUGIN plan_baseline SONAME 'libgreatdb_plan_baseline.so';

-- 开启采集
SET GLOBAL plan_baseline_enable_summary    = ON;
-- 开启持久化
SET GLOBAL plan_baseline_enable_persistent = ON;

之后,执行计划基线、历史计划、原始 SQL 信息会自动沉淀到专门的数据表里,配合内置的差分比对能力,同一条 SQL 前后的 cost 变化一目了然。

而最让人安心的,是它的工程设计——采集与查询解耦、内存缓存优先、异步落盘、查询无锁访问。这套"监控探头"几乎不占用数据库干正事的主链路,高并发下照样稳。就算某条 SQL 采集时出了岔子,也只是被静静跳过,绝不拖累整体
。

真正做到了:抓 Bug,不添乱。

写在最后

如果说以前排查执行计划退化,靠的是"运气 + 经验 + 一身冷汗",那么现在,GreatSQL 给了你一双随时在线的眼睛。

在性能问题爆发之前,就把那条"变心"的 SQL,抓个现行。

想了解更多细节,可查阅 GreatSQL 官方用户手册 8.4.4-5 版本

在Mysql中执行一条SQL,会经历什么? 背景 我们都经常使用Mysql作为数据库来存储与查询较常用的数据。当我们输入一行如SELECT * FROM table_name WHERE id=26这样的语句之后,Mysql如果正确执行的情况下,会输出你想要的信息。 那么,在你输入这行语句之后,一直到它显示出你想要的信息,这中间Mysql都经历了什么呢?这篇文章会简单聊一下这个事情。 Mysql基本架构图 我们先看下Mysql的一个较整体的... 阅读详情

相关推荐

一条SQL语句的执行究竟经历了哪些过程

一条SQL语句从输入到执行结果的过程包括多个复杂且精细的步骤,每一步都涉及DBMS的不同组件的协同工作。客户端连接。发送SQL语句。解析(词法和语法分析)。语义分析。优化(逻辑和物理优化)。执行计划生成。执行计划执行。返回结果。客户端接收和显示结果。事务管理和日志记录。缓存和存储管理。每一个步骤都至关重要,它们共同确保了SQL查询的正确性、高效性和一致性,从而让用户能够快速、准确地获取所需数据。

喜欢猪猪 916

来自灵魂的拷问:之迁移之后SQL执行变慢了

来自灵魂的拷问,为什么迁移到性能更好的服务器上之后SQL会变得更慢了呢,执行效率远不如从前。这大概是每一位DBA最不愿意又必须是要经历的浩劫。 开发反馈 一系列SQL执行都很慢,平均时间都在10多分钟,这个时间是不能接受的,要求从数据库层面优化SQL。直接上SQL: select count(1) from table_A a left join table_B b on A.id = B.id left join table_C c on A.code = C.reg ...

renyanjie123的博客 727

记一次系统被sql注入搞挂的惨痛经历

前言 最近我在整理安全漏洞相关问题,准备在公司做一次分享。恰好,这段时间团队发现了一个sql注入漏洞:在一个公共的分页功能中,排序字段作为入参,前端页面可以自定义。在分页sql的mybatis mapper.xml中,order by字段后面使用$符号动态接收计算后的排序参数,这样可以实现动态排序的功能。 但是,如果入参传入: id; select 1 -- 最终执行的sql会变成: select * from user order by id; select 1 -- limit 1,20 –会把后面

3160

我的SQL学习经历

点击关注上方“SQL数据库开发”,设为“置顶或星标”,第一时间送达干货大家好,我是李岳~经常有小伙伴问我:岳哥,你之前是怎么学会SQL的?有没有什么快速入门的方法?常常因为比较忙也不能系...

SQL数据库开发 635

BOSS直聘数据采集实战:八爪鱼工具高效爬取职位信息的完整指南

本文提供了一份使用八爪鱼采集器高效爬取BOSS直聘职位信息的完整实战指南。针对非技术用户,详细讲解了从软件安装、网址规律分析到流程配置、数据导出的每一步操作,并分享了提升采集稳定性的高级设置与避坑技巧,帮助用户轻松实现数据采集自动化。

weixin_29061509的博客 1474

【FPGA】Robei EDA的使用(10)————如何更新EDA的使用license

#海卑而下,能聚众水;学问笃实,以生光辉。 有的时候,有些问题自己通过查找资料解决,宁愿磨难一下,走点弯路,但收获更深刻的认知;不过,有些问题,问一下别人,可能会避免自己耗费过多时间做无用工,这些问题问会的人是极好的。但是怎样把握这个问题的类型,大约只能靠经验了~ (问我为何出此感言,谁叫我纠结了两天的问题,被人家一句话解决,我这个恨啊) ————————————————————正文开始的分割线———————————————— Robei EDA在使用上会有一个注册码,这个license在获取之后,每一次的

Ninquelote的博客 1004

一条SQL在mysql数据库中经历的过程

select、delete、update、insert语句在MySQL数据库中的执行过程又有什么区别呢?如果SQL带有过滤条件、分组语句、排序语句、join语句,那SQL的执行过程又有何不同呢?

qianxunsiyue的博客 504

群晖Hyper Backup还原实战:加密与非加密备份的完整操作指南

本文详细介绍了群晖Hyper Backup在加密与非加密备份场景下的完整还原操作指南。通过实战案例和高级技巧,帮助用户应对硬盘故障或系统崩溃时的数据恢复挑战,特别是加密备份恢复中的关键节点和常见陷阱。

weixin_29323365的博客 440

MySQL执行过程(一条SQL从Java到数据库都经历了什么)

从我们学习Java开始,我们就学了很多种操作数据库的方式,最开始的JDBC、后面的JPA、HIbernate、MyBatis,那你是否想过,我们只是简单的写了一个sql,最终是如何到达数据库、返回结果?这中间都经历了什么呢? 不管我们是用原生的JDBC还是后面的ORM框架,我们都会引入这样一个pom文件,这就是MySQL驱动,我们通过这个驱动去连接MySQL <dependency> <groupId>mysql</groupId> <artifa

小道仙的后宫 4268

从零开始:用摩尔线程S4000运行开源AI项目的完整流程

本文详细介绍了如何使用摩尔线程S4000 GPU从零开始运行开源AI项目的完整流程,包括硬件选择、驱动安装、容器化环境配置以及典型AI项目的实战部署。通过性能优化技巧,显著提升推理速度,适合开发者快速上手国产GPU的AI应用开发。

weixin_29231725的博客 581

(头歌作业)—6.1 葡萄酒评论分析报告(project)

请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。

2301_80677920的博客 1245

【SOP】最佳实践之 TiDB 业务读变慢分析

作者: 李文杰_Jellybean 原文来源: https://tidb.net/blog/3cf4615e ...

TiDB 社区干货传送门 221

无限维李代数局部与2-局部1/2-导子:从概念到Witt代数实例解析

在抽象代数与数学物理中,李代数是描述对称性的基本结构,而导子则是刻画其微分性质的核心算子。从经典的导子概念出发,通过引入“局部”与“分数阶”两个关键推广,形成了局部导子、2-局部导子以及1/2-导子等重要研究方向。这些推广不仅深化了对无限维李代数(如Witt代数、Virasoro代数)复杂结构的理解,其研究方法和结论也为共形场论、可积系统等物理理论提供了数学基础。本文聚焦于无限维李代数上局部与2-局部1/2-导子的系统研究,通过拆解核心概念、剖析典型代数结构,并以Witt代数为实例,详细演示了从全局1/2-

weixin_34072296的博客 392

记一次SQL优化经历

一条慢SQL导致线上服务器CPU占用报警.具体如下: SELECT * FROM video v RIGHT OUTER JOIN ( SELECT id FROM video USE INDEX(primary,idx_userid_status_createtime,channelId,createtime) WHERE 1 AND userid=223179 AND status IN ...

a442828032的博客 556

FPGA以太网通信实战(一):实现MDIO接口驱动,掌控PHY芯片的钥匙

本文介绍了以太网通信技术及其核心组件。首先概述了以太网的发展历程,从标准以太网(10Mbps)到万兆以太网(10Gbps)的技术演进。重点分析了以太网接口的两大核心部件:MAC控制器负责数据链路层协议处理,PHY芯片负责物理信号转换和连接管理。文章详细解读了MDIO接口规范,包括帧格式和读写时序,并以YT8531 PHY芯片为例,介绍了其寄存器配置方法。最后设计了一个FPGA实现方案,通过MDIO接口完成PHY芯片的软复位和状态监测功能,并利用LED指示灯实时显示网络连接速率。

weixin_64402689的博客 1662

TGAT Python:图神经网络中的动态图算法

其中,图神经网络中的动态图算法成为了研究的热点之一。在模型的 forward 方法中,通过循环调用 TGATLayer 实例来进行图神经网络的前向传播。最终,模型返回图中节点的表示向量 output,可以用于图分类等任务。TGAT 算法的核心思想是在节点之间建立注意力连接,以捕捉节点在不同时间步之间的关系。TGAT 算法通过引入注意力机制和时间信息,从而有效地对动态图数据进行建模和分析。通过以上 Python 代码,我们可以方便地构建和训练 TGAT 模型,并在图分类任务中应用它。

2301_79366435的博客 1827

一次神奇的 SQL 查询经历

点击上方"IT牧场",选择"设为星标"技术干货每日送达!来源:cnblogs.com/dijia478/p/11550902.html一、问题背景现网出现...

ITMuch的专栏 118

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一条SQL语句从开始到结束到底经历了什么?

Mysql逻辑架构图 Mysql逻辑架构分为两层 第一层Server层 第二层存储引擎层 Server层 连接器 是指通常我们所看见的在创建一个表的时候需要连接数库,所以在连接数据库时候就需要用到连接器,保证客户端能连接到数据库。连接器就负责跟客户端建立连接获取权限,维持和管理连接。 在连接完成后,如果没有其他的操作便处于空闲状态,默认8小时自动断开连接,当下次进行操作的时候需要重新连接数据库。 但是在连接之前咱们还有一个必不可少的环节,那就是需要通过TCP的三次握手连接MySQL服务。

似水流年,是谁苍白了等待 1584

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SQL语句经历

2019-04-19 1、cast( a.CONTENT_TYPE AS char ) CONTENT_TYPE --将SQL语句查询结果int类型转为String 2、<![CDATA[ **]]> <>、>=、<= ...

YUANfang121的博客 230

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SQL基础,2024Linux运维春招面试经历

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

2401_84183070的博客 1765

简历中的项目经历怎么写?

项目经历是面试官重点考察的内容,需要认真的好好的写。

Sam_Deep_Thinking 1万+
上一篇: 从库复制又延迟了?GreatSQL 8.4.4-5 让并行回放“不再堵车“
下一篇: gt-checksum v4.0.2 来了,换个校验引擎,效率起飞
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值