当前位置: 首页 > news >正文

蚂蚁集团SQLess 开源,与内部版有何区别?

当我们使用关系型数据库时,SQL 是联系起用户和数据库的一座桥梁。

SQL 是一种高度非过程化的语言,当我们在编写SQL 时,表达的是想要什么数据,而不是怎么获取数据。因此,我们往往更关心SQL 有没有满足业务逻辑,比如返回结果、响应速度、DB 吞吐等,不太想关心SQL 有没有性能问题、索引如何创建、SQL 问题怎么快速定位等风险。同时,我们希望这部分能力可以通过自动化、智能化产品来解决。

上述情况也一直困扰着蚂蚁集团内部的业务,在探索解决方案的过程中,得益于蚂蚁业务场景对数据库稳定性、吞吐量的极致要求,孵化了一款覆盖SQL 生命周期的诊断优化产品—— SQLess 。它服务于蚂蚁8000+用户、70+业务站点,被集成至30+业务平台,减少90% 的SQL 异常、提升80%故障恢复时效,保障了业务稳定性,是数据库的基础设施之一。

近日,SQLess 宣布开源,为蚂蚁集团之外的业务提供服务,包含SQL 防控体系、SQL 应急体系、SQL 优化体系三道防线。同时,SQLess 团队希望将蚂蚁集团内部沉淀的SQL 诊断优化经验与更多企业进行分享与交流。

图片

图片

SQLess 针对OceanBase 的SQL 优化实践

SQLess 开源后,成为了OceanBase 生态中的一员。SQLess 基于OceanBase 的Hint 机制,提供诊断优化、自愈限流、索引演进等能力。通过建立外部实时的流量检测,结合OceanBase 内部提供的统计信息,进行热点流量检测,用于智能识别热点行、锁冲突、热点账号、大小账号等细粒度SQL 问题。同时建立知识库体系,用于自动回归检测和算法学习。

整体线上自愈流程如下:

监控指标识别到异常 -> SQLess 找到根因SQL  -> SQLess 提供诊断建议 -> 自愈执行诊断操作 -> 监控指标回归正常

图片

针对增量SQL ,SQLess 结合蚂蚁的研发流程,提供SQL Review 能力,有效地将SQL 风险阻拦在上线之前。

图片

同时,针对存量SQL ,SQLess 结合治理平台,提供治理意见和性能回馈,有效push 存量问题SQL 的治理。

图片

图片

SQLess 内部版与开源版区别

目前,SQLess 在蚂蚁集团的实践更偏向于运维视角,解决的核心问题是蚂蚁业务在OceanBase 上的SQL 稳定性。区别于内部版,SQLess 开源版更偏向于研发视角,帮助用户更高效地写出优雅且高性能的SQL ,让用户花更少时间关注SQL 风险,更专注于SQL 业务逻辑本身,提升业务研发效率和数据库稳定性,并且提供全方位的SQL 监控能力,帮助用户解决SQL 风险并提升业务性能。正如SQLess 愿景描述的那样,让用户写SQL 时可以更聚焦于实现业务逻辑,而不需要关注性能问题:Less on SQL tuning,More to SQL doing。

图片

图片

图片

SQLess 适配各个研发阶段,将优化建议更加简单明了地告诉用户,追求通用性、可扩展性,可以接入不同的数据库引擎,用户也可以灵活配置或创建各个规则,用于适配自己的研发体系。

SQLess 开源版提供以下四个主要功能:

· SQL 优化:支持索引优化、研发规范 ( PMD ) 扫描、Rewrite 改写建议。

· SQL 审核:SQL Review 能力,可以集成在CICD pipeline 中。

· SQL 分析:multi-SQL 维度的综合分析,可以基于Slow log 、各个云厂商流量接口等方式进行SQL 优化。

· SQL 监控:实时态的TopSQL 分析,提供SQL 动态的实时监控,提供采样流水、执行计划、统计信息等辅助信息帮助用户找到问题SQL 、分析问题根因。

目前支持的数据库引擎包括OceanBase 3.x 版本和OceanBase 4.x 版本,以及MySQL 5.6 版本和MySQL 5.7 版本,未来还将支持更多数据库。

SQLess 架构设计及产品规划

为了更好地适配不同业务场景、扩展规则、支持更多的数据库引擎,SQLess 大部分组件都以插件化设计。

用户可以方便地使用规则或者自定义规则来适配自己的业务场景。

图片

对于优化器,采用“前置规则->剪枝规则->RBO 规则->CBO 成本计算”架构,支持三个优化能力:

  • 索引优化

  • 研发规范扫描

  • SQL Rewrite 优化

对于解析器,使用插件化框架,支持不同解析任务。

  • SQL 解析,支持不同DB 引擎的接入,已支持OceanBase 、MySQL

  • 文本解析:支持不同文本类型的接入,已支持MySQL 慢查询日志、SQL 流量文件

  • XML 解析:支持不同ORM 框架的接入,已支持MyBatis

规则引擎也使用插件化框架,支持各维度的规则沉淀:

  • RBO 规则

  • Rewrite  规则

  • 研发规范

  • 异常诊断(规划中)

  • 根因分析(规划中)

目前,SQLess 团队大部分工作聚焦在规则场景沉淀、数据库引擎扩展、优化器扩展、ORM 框架扩展、多云产品接入等工作上。希望帮助用户更加简单、准确地解决各类SQL 问题,比如:

1. 规则场景沉淀,不断丰富SQL PMD /SQL Rewrite /异常诊断等规则。

2. 数据库引擎扩展,目前支持OceanBase3.x /4.x、MySQL 5.6 /5.7,后续计划将持续支持MySQL8.0 /PostgreSQL /Oracle /TiDB /PolarDB 等数据库引擎。

3. 优化器扩展,目前支持Cost-Based Optimizer ,后续计划将持续支持AI-Based Optimizer 、Query-Based Workload Analysis 等更强大的优化器特性。

4. ORM框架扩展,目前只适配了MyBatis ,后续将持续支持GORM/Hibernate /SQLAlchemy 等ORM 框架。

5. 多云产品接入,持续支持多云产品的接入,类如OceanBase Cloud /Aliyun RDS /TiCloud 等。

6. 大模型结合的AIGC ,支持NL2SQL 、NL2DDL 、NL2 报表、SQL 优化、Schema 优化等。

除了建设更多SQL 能力外,SQLess 将提供轻量级的lib ,用于更好地接入如CICD 、SQL Console 、IDE 插件适用于SQL 优化和分析的产品。SQLess 也将持续加强与OceanBase 开源社区的融合,并支持MySQL 、PostgreSQL 等数据库,为更多数据库生态的用户提供服务,建设通用SQL 能力的开源生态。

图片

参与开源项目共建

如果你对OceanBase 和SQLess 感兴趣,欢迎任何形式的参与,包括且不限于提问、代码贡献、技术讨论等。期待收到社区想法和反馈,以推动项目持续前进。

OceanBase 开源项目地址:

https://github.com/oceanbase/sql-lifecycle-management

SQLess 开源项目地址: 

https://github.com/oceanbase/sql-lifecycle-management

OceanBase 用户群:

钉钉群号:33254054

OB 小助手微信:OBCE666

SQLess 用户群:

钉钉群号:33920014194

官方人员微信:ztk1294604739

附SQLess 快速上手流程

第一步,执行环境,推荐版本python = v3.6.x ,依赖安装(后续将提供镜像)。

git clone https://github.com/oceanbase/sql-lifecycle-management.git

cd sql-lifecycle-management && make install

第二步,数据库初始化。

# 填写本地元数据库链接方式

cd sql-lifecycle-management && vim db.cfg

# 本地元数据库初始化

mysql -h host_ip -u user_name -p

source init/init.sql

第三步,访问页面(http://localhost:8989)

cd sql-lifecycle-management && sh ./start.sh

相关文章:

蚂蚁集团SQLess 开源,与内部版有何区别?

当我们使用关系型数据库时,SQL 是联系起用户和数据库的一座桥梁。 SQL 是一种高度非过程化的语言,当我们在编写SQL 时,表达的是想要什么数据,而不是怎么获取数据。因此,我们往往更关心SQL 有没有满足业务逻辑&#xff…...

An Efficient Memory-Augmented Transformer for Knowledge-Intensive NLP Tasks

本文是LLM系列文章,针对《An Efficient Memory-Augmented Transformer for Knowledge 一种用于知识密集型NLP任务的高效内存增强转换器 摘要1 引言2 相关工作3 高效内存增强Transformer4 EMAT的训练流程5 实验6 分析7 结论局限性 摘要 获取外部知识对于许多自然语言…...

Java项目中jar war pom包的区别

1、pom&#xff1a;用在父级工程或聚合工程中&#xff0c;用来做jar包的版本控制&#xff0c;必须指明这个聚合工程的打包方式为pom。 <project ...> <modelVersion>4.0.0</modelVersion> <groupId>com.wong.tech</groupId> <artifactI…...

整理mongodb文档:分页

个人博客 整理mongodb文档:分页 个人博客&#xff0c;求关注&#xff0c;如果文章不够清晰&#xff0c;麻烦指出。 文章概叙 本文主要讲下在聚合以及crud的find方法中如何使用limit还有skip进行排序。 分页的情况很经常出现&#xff0c;这也是这篇博客诞生的理由。 数据准备…...

社区团购新玩法,生鲜蔬菜配货发货小程序商城

在当前的电商市场中&#xff0c;生鲜市场具有巨大的潜力和发展空间。为了满足消费者的需求&#xff0c;许多生鲜店正在寻找创新的方法来提高销售和客户满意度。其中&#xff0c;制作一个个性且功能强大的生鲜小程序商城是一个非常有效的策略。以下是在乔拓云平台上制作生鲜小程…...

shell bash中设置命令set

1 Preface/Foreword set命令用于shell脚本在执行命令时候&#xff0c;遇到异常的处理机制。 2 Usage 2.1 set -e 当执行命令过程中遇到异常&#xff0c;那么就退出脚本&#xff0c;不会往下执行其它命令。 #!/bin/bash #set -eroot GIT_TAG${CI_BUILD_TAG-NOTAG} GIT_REV…...

机器学习---预剪枝、后剪枝(REP、CCP、PEP、)

1. 为什么要进行剪枝 横轴表示在决策树创建过程中树的结点总数&#xff0c;纵轴表示决策树的预测精度。 实线显示的是决策树 在训练集上的精度&#xff0c;虚线显示的则是在⼀个独⽴的测试集上测量出来的精度。 随着树的增⻓&#xff0c;在 训练样集上的精度是单调上升的&…...

Python 爬虫—scrapy

scrapy用于从网站中提取所需数据的开源协作框架。以一种快速、简单但可扩展的方式。 该爬虫框架适合于那种静态页面&#xff0c; js 加载的话&#xff0c;如果你无法模拟它的 API 请求&#xff0c;可能就需要使用 selenium 这种使用无头浏览器的方式来完成你的需求了 入门 imp…...

ABB机器人20032转数计数器未更新故障报警处理方法

ABB机器人20032转数计数器未更新故障报警处理方法 ABB的机器人上面安装有电池,需要定期进行更换(正常一年换一次),如果长时间不更换,电量过低,就会出现转数计数器未更新的报警,各轴编码器的位置就会丢失,在更换新电池后,需要更新转数计数器。 具体步骤如下: 先用手动…...

C# 记事本应用程序

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...

模型训练:优化人工智能和机器学习,完善DevOps工具的使用

作者&#xff1a;JFrog大中华区总经理董任远 据说法餐的秘诀在于黄油、黄油、更多的黄油。同样&#xff0c;对于DevOps而言&#xff0c;成功的三大秘诀是自动化、自动化、更高程度的自动化&#xff0c;而这一切归根结底都在于构建能够更快速地不断发布新版软件的流程。 尽管人…...

WorldCoin 运营数据,业务安全分析

WorldCoin 运营数据&#xff0c;业务安全分析 Worldcoin 的白皮书中声明&#xff0c;Worldcoin 旨在构建一个连接全球人类的新型数字经济系统&#xff0c;由 OpenAI 创始人 Sam Altman 于 2020 年发起。通过区块链技术在 Web3 世界中实现更加公平、开放和包容的经济体系&#…...

Java之Calender类的详细解析

Calendar类 3.1 概述 java.util.Calendar类表示一个“日历类”&#xff0c;可以进行日期运算。它是一个抽象类&#xff0c;不能创建对象&#xff0c;我们可以使用它的子类&#xff1a;java.util.GregorianCalendar类。 有两种方式可以获取GregorianCalendar对象&#xff1a; …...

uniapp 微信小程序 锚点跳转

uniapp文档 以下是我遇到的业务场景&#xff0c;是点击商品分类的某一类 然后页面滚动至目标分类&#xff0c; 首先第一步是设置锚点跳转的目的地&#xff0c;在目标的dom上面添加id属性 然后给每个分类每一项添加点击事件&#xff0c;分类这里的item数据里面有一字段是和上…...

主成分分析笔记

主成分分析是指在尽量减少失真的前提下&#xff0c;将高维数据压缩成低微的方式。 减少失真是指最大化压缩后数据的方差。 记 P P P矩阵为 n m n\times m nm&#xff08; n n n行 m m m列&#xff09;的矩阵&#xff0c;表示一共有 m m m组数据&#xff0c;每组数据有 n n n…...

android studio 的 adb配置

首先在 Android Studio 中 打开 File -> Settings: 下载 “Google USB Driver” 这个插件 (真机调试的时候要用到), 并且记一下上面的SDK路径: 右键桌面上的 “我的电脑”, 点击 “高级系统设置”, 配置计算机的高级属性, 有两步: 添加一个新的环境变量 ANDROID_HOME, 变量…...

【HTML5高级第一篇】Web存储 - cookie、localStorage、sessionStorage

文章目录 一、数据存储1.1 cookie1.1.1 概念介绍1.1.2 存储与获取1.1.3 方法的封装1.1.4 总结 1.2 localstorage 与 sessionstorage1.2.1 概述1.2.2 操作数据的属性或方法1.2.3 案例-提交问卷1.2.4 Web Storage带来的好处 附录&#xff1a;1. HTML5提供的数据持久化技术&#x…...

Flink---1、概述、快速上手

1、Flink概述 1.1 Flink是什么 Flink的官网主页地址&#xff1a;https://flink.apache.org/ Flink的核心目标是“数据流上有状态的计算”(Stateful Computations over Data Streams)。 具体说明&#xff1a;Apache Flink是一个“框架和分布式处理引擎”&#xff0c;用于对无界…...

QT实现TCP通信(服务器与客户端搭建)

一、TCP通信框架 二、QT中的服务器操作 创建一个QTcpServer类对象&#xff0c;该类对象就是一个服务器调用listen函数将该对象设置为被动监听状态&#xff0c;监听时&#xff0c;可以监听指定的ip地址&#xff0c;也可以监听所有主机地址&#xff0c;可以通过指定端口号&#x…...

云备份项目

云备份项目 1. 云备份认识 自动将本地计算机上指定文件夹中需要备份的文件上传备份到服务器中。并且能够随时通过浏览器进行查看并且下载&#xff0c;其中下载过程支持断点续传功能&#xff0c;而服务器也会对上传文件进行热点管理&#xff0c;将非热点文件进行压缩存储&…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...