【开源设计】京东慢SQL组件:sql-analysis

京东慢SQL组件:sql-analysis

地址:https://github.com/jd-opensource/sql-analysis

一、背景

开发中,无疑会遇到慢SQL问题,而常见的处理思路都是等上线,然后由监控报警之后再去定位对应慢SQL,随后定位问题,进行优化处理,这一出现是在慢SQL已经发生了的情况下的。

而这个 sql-analysis 开源组件是作用于 慢SQL发生之前,这种方式可以在事前尽可能地对慢SQL进行控制和处理。实现思路也很简单,就是通过Mybatis的插件机制,拦截语法分析前,以 Explain 分析结果 + 规则引擎匹配 的方式进行分析,以一种积分的判断的方式得出这个是否符合最终慢SQL的条件,符合的话进行采集,而后开发人员可以针对SQL看是否可以优化。

有了它即可:即可提前发现慢 SQL,提前做好一定的防控

像这种使用Mybatis插件机制去实现某一功能还有很多:

像我之前实现的分库分表组件,是否需要进行分表逻辑,修改SQL表的信息(对应starters地址:https://github.com/koxumeiqi/-starters- );

像Mybatis-plus对Mybatis拓展实现的插件;

像Mybatis分页插件等等...

使用的话很简单,就正常使用,然后它会拦截做一些事情就是,现在咱看一下它到底咋实现的,做了哪些事情。

二、源码简析

  1. 对语法分析阶段进行个采集:

  2. 去获取对应执行SQL的完整语句

    • 获取对应的MappedStatement,然后获取到对应的sql,这个sql是待预处理的,就是说带 ?

    • 对这个SQL进行个检查(是否分析过、是否是需要分析的类型Type、是否是黑名单里的SQL)

    • 获取到转换后的SQL,就是把?转换为了对应真实值


      • 提取出来的SQL长下面这样:
  3. 拿到提取的SQL去Explain做分析,把分析的结果封装成 List,SqlAnalysisResult里面存了我们Explain出来的各种信息

  4. 然后去拿到分析出来的结果去做评估,去打分

    • 匹配减分规则
      • 这些规则都是配的(启动的时候会解析)

随后去减分,去统计综合的分数,看是否达到了预警,达到了设个标志位为true,后续采集/输出时可以作为判别依据:

  1. 做输出/采集处理(这里默认是打印Error日志)

默认实现就是打印对应规则的原因和建议:

三、总结

总流程如下:

整体给人感觉还是很简单的,但是它确实是一个慢SQL预防的一个思路吧,而且是提前预防。

相关推荐
huangdong_6 小时前
电商平台图片URL原图转换技术深度解析:从缩略图到高清原图的完整方案
java·后端·spring
記億揺晃着的那天7 小时前
Java 调用外部 Go 程序的实践:ProcessBuilder 在生产环境中的应用
java·golang·processbuilder
JAVA面经实录9177 小时前
Java 数据结构与算法 (终极完整学习文档)
java·数据结构·算法
计算机安禾7 小时前
【数据库系统原理】第19篇:计算机存储层次结构与数据库文件的物理组织
数据库·oracle
JAVA面经实录9178 小时前
操作系统面试题
java·服务器·数据库·计算机网络·面试
摇滚侠8 小时前
mariadb-libs 被 mysql-community-libs-5.7.28-1.el7.x86_64 取代
数据库·mysql·mariadb
一杯奶茶¥8 小时前
基于springboot的失物招领管理系统带万字文档 校园失物招领管理系统 失物认领管理系统java springboot vue
java·vue.js·spring boot·java项目
不能只会打代码8 小时前
边缘视频分析平台的架构设计与性能优化——从750ms到190ms的调优之路
java·spring boot·redis·性能优化·边缘计算·物联网竞赛
小刘|8 小时前
Spring AI Alibaba 集成和风天气 API 实战
java·服务器·前端
KANGBboy8 小时前
java知识五(继承)
java·开发语言