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

news2024/11/16 17:37:48

京东慢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预防的一个思路吧,而且是提前预防。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1637909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

06 - 步骤 add constants

简介 Add Constants 步骤是用于在数据流中添加常量字段的步骤。它允许用户在数据流中插入一个或多个常量字段,并为这些字段指定固定的数值、字符串或其他类型的常量值。 使用 场景 我需要在数据清后,这个JSON 字符串有一个固定的行流数据。 1、拖拽…

如何判断自己是不是偏执型人格障碍

什么是偏执性人格障碍? 偏执型人格障碍是比较常见的一种人格障碍类型,其特征是偏执,和一般的固执,顽固有所不同。通常我们说一个人很固执或顽固,更多是因为其坚持己见,不受他人的思想左右,其本…

代谢组数据分析七:从质谱样本制备到MaxQuant搜库

前言 LC-MS/MS Liquid Chromatography-Mass Spectrometry(LC-MS/MS ,液相色谱-质谱串联)可用于残留化合物检测、有机小分子检测、鉴定和定量污染物以及在医药和食品领域添加剂检测和生物小分子等检测。 LC-MS/MS一般包含五个步骤&#xff…

yolov5口罩检测实战

学习资料提要:手把手教你使用YOLOV5训练自己的目标检测模型-口罩检测-视频教程_搭建yolo目标检测的环境. 使用yolo-air模块来做实验-CSDN博客 在B站上有这个UP主的实操视频 一 环境安装 1.先在anaconda prompt 里面 (1)conda activate 会转为(base&…

【LeetCode刷题】875. 爱吃香蕉的珂珂

1. 题目链接 875. 爱吃香蕉的珂珂 2. 题目描述 3. 解题方法 简单的用我自己的理解来解释一下这道题的意思。 所以也就是说找到一个速度k,看还有没有比k更小的速度能吃完数组中的香蕉,如果有则继续寻找,没有则是k这个速度。就好比上面的解释…

HarmonyOS 4.0(鸿蒙开发)01 - 怎么学习鸿蒙引导篇

作为公司的全栈开发工程师 以及 未来的发展是有鸿蒙这个阶段的,以及本身具有这个技术栈由此后续会分享自己在实战中学习到的东西,碰到的bug都会分享出来,这是引导篇期待后续的更新 学习目标: 理解HarmonyOS操作系统的架构和开发…

Django后台项目开发实战八

添加候选人提交简历功能 第八阶段 安装第三方注册包 pip install django-registration-redux 在 setting.py 注册,并添加配置 INSTALLED_APPS [grappelli,registration,django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.…

展会资讯 | 现场精彩回顾 阿尔泰科技参展2024第23届中国国际(西部)光电产业!

2024第23届中国国际(西部)光电产业博览会,在成都世纪城新国际会展中心圆满落幕!来自各地的光电领域设备及材料厂商汇聚一堂,展示前沿技术及创新成果。 展会现场,来自全国各地的500余家企业就精密光学、信息…

ubuntu22.04 cmake 配置mysql

报错信息: CMake Error at CMakeLists.txt:33 (find_package): By not providing “FindMySQL.cmake” in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by “MySQL”, but CMake did not find one. Could not…

MySQL:设置唯一索引还是出现重复数据

一、MySQL中null和null不相等 MySQL中:两个值比较会出现:true、false、null 三种情况; null和null相比较会出现未知的类型 二、然后看完这个视频 美团二面:我记得明明加了mysql唯一索引,为啥还会出现重复数据吗&…

手拉手springboot整合kafka

前期准备安装kafka 启动Kafka本地环境需Java 8以上 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 Kafka启动方式有Zookeeper和Kraft,两种方式只能选择其中一种启动,不能同时使用。 Kafka下载…

【独立版】商城盲盒源码带uniapp(H5+小程序+APP三端)全开源

前端uniapp开源代码,可用HBuilder工具无限发行H5、小程序和打包app,后端PHP开源源码,支持二开。 内有安装搭建教程,轻松部署,搭建即可运营,内置永久免费更新地址,后续无忧升级。 【独立版】商…

github托管静态页面

免费在线上空间,不用简直就是浪费,关键还不限流量赶紧去折腾一下 这是搭建的GitHub托管网页,由于是GitHub的服务器,国内访问会非常!慢 下载 Watt Toolkit 这里我建议下载一个软件 Watt Toolkit 它是一个开源跨…

ArcGIS专题图制作—利用ArcGIS和Blender制作真实感的3D底图

小编前几日发布的3D地形图很多小伙伴表示很感兴趣,今天就大致做出来一个教程,技术不精,希望能给大家一些帮助! 教程录制好视频了,大家可以自行查看!链接如下: 超好看底图! 使用ArcG…

redis 高可用 Sentinel 详解

写在前面 redis 在我们日常的业务开发中是十分常见的,而redis的可用性就必须要有很高的要求,那么 redis集群的高可用由有一个或者多个 Sentinel(哨兵) 实例组成的 哨兵系统来保证的。 哨兵 由一个或者多个 Sentinel 实例组成的 Sentinel 系统可以监控任…

图床搭建GitHub+PicGo+jsdelivr(CDN)+Typora(内附加速工具)

目录 安装PicGo GitHub配置与加速器 配置PicGo 使用typroa 安装PicGo PicGo是一个用于上传图片的客户端,支持拖拽上传、剪贴板上传,功能十分方便。 下载地址: https://github.com/Molunerfinn/PicGo/releases 个人网盘自取版本2.4.0…

C++成员初始化列表

我们在类的构造函数中使用成员初始化列表可以带来效率上的提升,那么成员初始化列表在编译后会发生什么就是这篇文章要探究的问题 文章目录 引入成员初始化列表用成员初始化列表优化上面的代码成员初始化列表展开成员初始化列表的潜在危险 参考资料 引入 考虑下面这…

CSS高级选择器

一、属性选择器 以value开头的att属性的E元素&#xff1a;E[att^"value"]{ ;} a[href^http]{background-color"red";} css a[href^http]{background-color"red"; } html <!DOCTYPE html> <html lang"en"> <head&…

特斯拉全自动驾驶系统Tesla‘s Full-Self Driving (FSD)

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Overview Tesla’s FSD is a suite of features that includes Autopilot, Navigate on Autopilot, Auto Lane Change, Autopark, Summon, and Traffic Light and Stop Sig…

数字旅游引领未来智慧之旅:科技应用深度重塑旅游生态,智慧服务全面升级打造极致高品质旅游体验

随着信息技术的飞速发展&#xff0c;数字旅游作为旅游业与科技融合的新兴业态&#xff0c;正以其独特的魅力和优势&#xff0c;引领着旅游业迈向智慧之旅的新时代。数字旅游不仅通过科技应用重塑了旅游生态&#xff0c;更通过智慧服务为游客带来了高品质的旅游体验。本文将深入…