當(dāng)我們使用關(guān)系型數(shù)據(jù)庫(kù)時(shí),SQL 是聯(lián)系起用戶和數(shù)據(jù)庫(kù)的一座橋梁。
SQL 是一種高度非過(guò)程化的語(yǔ)言,當(dāng)我們?cè)诰帉慡QL 時(shí),表達(dá)的是想要什么數(shù)據(jù),而不是怎么獲取數(shù)據(jù)。因此,我們往往更關(guān)心SQL 有沒(méi)有滿足業(yè)務(wù)邏輯,比如返回結(jié)果、響應(yīng)速度、DB 吞吐等,不太想關(guān)心SQL 有沒(méi)有性能問(wèn)題、索引如何創(chuàng)建、SQL 問(wèn)題怎么快速定位等風(fēng)險(xiǎn)。同時(shí),我們希望這部分能力可以通過(guò)自動(dòng)化、智能化產(chǎn)品來(lái)解決。
上述情況也一直困擾著螞蟻集團(tuán)內(nèi)部的業(yè)務(wù),在探索解決方案的過(guò)程中,得益于螞蟻業(yè)務(wù)場(chǎng)景對(duì)數(shù)據(jù)庫(kù)穩(wěn)定性、吞吐量的極致要求,孵化了一款覆蓋SQL 生命周期的診斷優(yōu)化產(chǎn)品—— SQLess?。它服務(wù)于螞蟻8000+用戶、70+業(yè)務(wù)站點(diǎn),被集成至30+業(yè)務(wù)平臺(tái),減少90% 的SQL 異常、提升80%故障恢復(fù)時(shí)效,保障了業(yè)務(wù)穩(wěn)定性,是數(shù)據(jù)庫(kù)的基礎(chǔ)設(shè)施之一。
近日,SQLess 宣布開源,為螞蟻集團(tuán)之外的業(yè)務(wù)提供服務(wù),包含SQL 防控體系、SQL 應(yīng)急體系、SQL 優(yōu)化體系三道防線。同時(shí),SQLess 團(tuán)隊(duì)希望將螞蟻集團(tuán)內(nèi)部沉淀的SQL 診斷優(yōu)化經(jīng)驗(yàn)與更多企業(yè)進(jìn)行分享與交流。
SQLess 針對(duì)OceanBase 的SQL 優(yōu)化實(shí)踐
SQLess 開源后,成為了OceanBase 生態(tài)中的一員。SQLess 基于OceanBase 的Hint 機(jī)制,提供診斷優(yōu)化、自愈限流、索引演進(jìn)等能力。通過(guò)建立外部實(shí)時(shí)的流量檢測(cè),結(jié)合OceanBase 內(nèi)部提供的統(tǒng)計(jì)信息,進(jìn)行熱點(diǎn)流量檢測(cè),用于智能識(shí)別熱點(diǎn)行、鎖沖突、熱點(diǎn)賬號(hào)、大小賬號(hào)等細(xì)粒度SQL 問(wèn)題。同時(shí)建立知識(shí)庫(kù)體系,用于自動(dòng)回歸檢測(cè)和算法學(xué)習(xí)。
整體線上自愈流程如下:
監(jiān)控指標(biāo)識(shí)別到異常 -> SQLess 找到根因SQL? -> SQLess 提供診斷建議 -> 自愈執(zhí)行診斷操作 -> 監(jiān)控指標(biāo)回歸正常
針對(duì)增量SQL ,SQLess 結(jié)合螞蟻的研發(fā)流程,提供SQL Review 能力,有效地將SQL 風(fēng)險(xiǎn)阻攔在上線之前。
同時(shí),針對(duì)存量SQL ,SQLess 結(jié)合治理平臺(tái),提供治理意見(jiàn)和性能回饋,有效push 存量問(wèn)題SQL 的治理。
SQLess 內(nèi)部版與開源版區(qū)別
目前,SQLess 在螞蟻集團(tuán)的實(shí)踐更偏向于運(yùn)維視角,解決的核心問(wèn)題是螞蟻業(yè)務(wù)在OceanBase 上的SQL 穩(wěn)定性。區(qū)別于內(nèi)部版,SQLess 開源版更偏向于研發(fā)視角,幫助用戶更高效地寫出優(yōu)雅且高性能的SQL ,讓用戶花更少時(shí)間關(guān)注SQL 風(fēng)險(xiǎn),更專注于SQL 業(yè)務(wù)邏輯本身,提升業(yè)務(wù)研發(fā)效率和數(shù)據(jù)庫(kù)穩(wěn)定性,并且提供全方位的SQL 監(jiān)控能力,幫助用戶解決SQL 風(fēng)險(xiǎn)并提升業(yè)務(wù)性能。正如SQLess 愿景描述的那樣,讓用戶寫SQL 時(shí)可以更聚焦于實(shí)現(xiàn)業(yè)務(wù)邏輯,而不需要關(guān)注性能問(wèn)題:Less on SQL tuning,More to SQL doing。
SQLess 適配各個(gè)研發(fā)階段,將優(yōu)化建議更加簡(jiǎn)單明了地告訴用戶,追求通用性、可擴(kuò)展性,可以接入不同的數(shù)據(jù)庫(kù)引擎,用戶也可以靈活配置或創(chuàng)建各個(gè)規(guī)則,用于適配自己的研發(fā)體系。
SQLess 開源版提供以下四個(gè)主要功能:
· SQL 優(yōu)化:支持索引優(yōu)化、研發(fā)規(guī)范 ( PMD ) 掃描、Rewrite 改寫建議。
· SQL 審核:SQL Review 能力,可以集成在CICD pipeline 中。
· SQL 分析:multi-SQL 維度的綜合分析,可以基于Slow log 、各個(gè)云廠商流量接口等方式進(jìn)行SQL 優(yōu)化。
· SQL 監(jiān)控:實(shí)時(shí)態(tài)的TopSQL 分析,提供SQL 動(dòng)態(tài)的實(shí)時(shí)監(jiān)控,提供采樣流水、執(zhí)行計(jì)劃、統(tǒng)計(jì)信息等輔助信息幫助用戶找到問(wèn)題SQL 、分析問(wèn)題根因。
目前支持的數(shù)據(jù)庫(kù)引擎包括OceanBase 3.x 版本和OceanBase 4.x 版本,以及MySQL 5.6 版本和MySQL 5.7 版本,未來(lái)還將支持更多數(shù)據(jù)庫(kù)。
SQLess 架構(gòu)設(shè)計(jì)及產(chǎn)品規(guī)劃
為了更好地適配不同業(yè)務(wù)場(chǎng)景、擴(kuò)展規(guī)則、支持更多的數(shù)據(jù)庫(kù)引擎,SQLess 大部分組件都以插件化設(shè)計(jì)。
用戶可以方便地使用規(guī)則或者自定義規(guī)則來(lái)適配自己的業(yè)務(wù)場(chǎng)景。
對(duì)于優(yōu)化器,采用“前置規(guī)則->剪枝規(guī)則->RBO 規(guī)則->CBO 成本計(jì)算”架構(gòu),支持三個(gè)優(yōu)化能力:
-
索引優(yōu)化
-
研發(fā)規(guī)范掃描
-
SQL Rewrite 優(yōu)化
對(duì)于解析器,使用插件化框架,支持不同解析任務(wù)。
-
SQL 解析,支持不同DB 引擎的接入,已支持OceanBase 、MySQL
-
文本解析:支持不同文本類型的接入,已支持MySQL 慢查詢?nèi)罩尽QL 流量文件
-
XML 解析:支持不同ORM 框架的接入,已支持MyBatis
規(guī)則引擎也使用插件化框架,支持各維度的規(guī)則沉淀:
-
RBO 規(guī)則
-
Rewrite? 規(guī)則
-
研發(fā)規(guī)范
-
異常診斷(規(guī)劃中)
-
根因分析(規(guī)劃中)
目前,SQLess 團(tuán)隊(duì)大部分工作聚焦在規(guī)則場(chǎng)景沉淀、數(shù)據(jù)庫(kù)引擎擴(kuò)展、優(yōu)化器擴(kuò)展、ORM 框架擴(kuò)展、多云產(chǎn)品接入等工作上。希望幫助用戶更加簡(jiǎn)單、準(zhǔn)確地解決各類SQL 問(wèn)題,比如:
1. 規(guī)則場(chǎng)景沉淀,不斷豐富SQL PMD /SQL Rewrite /異常診斷等規(guī)則。
2. 數(shù)據(jù)庫(kù)引擎擴(kuò)展,目前支持OceanBase3.x /4.x、MySQL 5.6 /5.7,后續(xù)計(jì)劃將持續(xù)支持MySQL8.0 /PostgreSQL /Oracle /TiDB /PolarDB 等數(shù)據(jù)庫(kù)引擎。
3. 優(yōu)化器擴(kuò)展,目前支持Cost-Based Optimizer ,后續(xù)計(jì)劃將持續(xù)支持AI-Based Optimizer 、Query-Based Workload Analysis 等更強(qiáng)大的優(yōu)化器特性。
4. ORM框架擴(kuò)展,目前只適配了MyBatis ,后續(xù)將持續(xù)支持GORM/Hibernate /SQLAlchemy 等ORM 框架。
5. 多云產(chǎn)品接入,持續(xù)支持多云產(chǎn)品的接入,類如OceanBase Cloud /Aliyun RDS /TiCloud 等。
6. 大模型結(jié)合的AIGC ,支持NL2SQL 、NL2DDL 、NL2 報(bào)表、SQL 優(yōu)化、Schema 優(yōu)化等。
除了建設(shè)更多SQL 能力外,SQLess 將提供輕量級(jí)的lib ,用于更好地接入如CICD 、SQL Console 、IDE 插件適用于SQL 優(yōu)化和分析的產(chǎn)品。SQLess 也將持續(xù)加強(qiáng)與OceanBase 開源社區(qū)的融合,并支持MySQL 、PostgreSQL 等數(shù)據(jù)庫(kù),為更多數(shù)據(jù)庫(kù)生態(tài)的用戶提供服務(wù),建設(shè)通用SQL 能力的開源生態(tài)。
參與開源項(xiàng)目共建
如果你對(duì)OceanBase 和SQLess 感興趣,歡迎任何形式的參與,包括且不限于提問(wèn)、代碼貢獻(xiàn)、技術(shù)討論等。期待收到社區(qū)想法和反饋,以推動(dòng)項(xiàng)目持續(xù)前進(jìn)。
OceanBase 開源項(xiàng)目地址:
https://github.com/oceanbase/sql-lifecycle-management
SQLess 開源項(xiàng)目地址:?
https://github.com/oceanbase/sql-lifecycle-management
OceanBase 用戶群:
釘釘群號(hào):33254054
OB 小助手微信:OBCE666
SQLess 用戶群:
釘釘群號(hào):33920014194
官方人員微信:ztk1294604739
附SQLess 快速上手流程
第一步,執(zhí)行環(huán)境,推薦版本python = v3.6.x ,依賴安裝(后續(xù)將提供鏡像)。
git clone https://github.com/oceanbase/sql-lifecycle-management.git
cd sql-lifecycle-management && make install
第二步,數(shù)據(jù)庫(kù)初始化。
# 填寫本地元數(shù)據(jù)庫(kù)鏈接方式
cd sql-lifecycle-management && vim db.cfg
# 本地元數(shù)據(jù)庫(kù)初始化
mysql -h host_ip -u user_name -p
source init/init.sql
第三步,訪問(wèn)頁(yè)面(http://localhost:8989)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-694619.html
cd sql-lifecycle-management && sh ./start.sh文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-694619.html
到了這里,關(guān)于螞蟻集團(tuán)SQLess 開源,與內(nèi)部版有何區(qū)別?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!