小米正式開源 SQL 智能優(yōu)化與改寫工具 SOAR
近日,小米正式宣布開源 SOAR。
截至今日,該項目已經(jīng)獲得了 350 個「star」以及 44 個「fork」(GitHub項目地址:https://github.com/XiaoMi/soar)
SOAR 簡介
SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能優(yōu)化與改寫工具,由小米運維 DBA 團隊出品
SOAR 體系架構(gòu)
SOAR主要由語法解析器,集成環(huán)境,優(yōu)化建議,重寫邏輯,工具集五大模塊組成。
語法解析和語法檢查
一條SQL從文件,標準輸入或命令行參數(shù)等形式傳遞給SOAR后首先進入語法解析器,選用了vitess的語法解析庫作為SOAR的語法解析庫,但隨時需求的不斷增加我們發(fā)現(xiàn)有些復(fù)雜需求使用vitess的語法解析實現(xiàn)起來比較邏輯比較復(fù)雜。于是參考業(yè)辦其他數(shù)據(jù)庫產(chǎn)品,于是引入了TiDB的語法解析器做為補充。后來發(fā)現(xiàn)這兩個解析庫還存在一定的盲區(qū),于是又引入了MySQL執(zhí)行返回結(jié)果作為多多版本SQL方言的補充。大家也可以看到在語法解析器這里,SOAR的實現(xiàn)方案是松散的、可插拔的。SOAR并不直接維護龐大的語法解析庫,它把各種優(yōu)秀的語法解析庫集成在一起,各取所長。
集成環(huán)境
集成環(huán)境區(qū)分線上環(huán)境和測試環(huán)境兩種,分別用于解決不同場景下用戶的SQL優(yōu)化需求。一種常見的情況是已有表結(jié)構(gòu)需要優(yōu)化查詢SQL的場景,可以從線上環(huán)境導(dǎo)出表結(jié)構(gòu)和足夠的采樣數(shù)據(jù)到測試環(huán)境,在測試環(huán)境上就可以放心的執(zhí)行各種高危操作而不用擔心數(shù)據(jù)被損壞。另一種常見的情況是建一套全新的數(shù)據(jù)庫,需要驗證提供的數(shù)據(jù)字典中是否存在優(yōu)化的可能。對于這種情況,很有可能你不需要知道線上環(huán)境在哪兒,完全只是想先試試看,如果報錯了馬上改對就是了。當然還有更多種組合的場景需求,將在集成環(huán)境一單分類說明。
優(yōu)化建議
目前SOAR可以提供的優(yōu)化建議有基于啟發(fā)式規(guī)則(通常也稱之為經(jīng)驗)的優(yōu)化建議,基于索引優(yōu)化算法給出的索引優(yōu)化建議,以及基于EXPLAIN信息給出的解讀。
重寫邏輯
上面提到的優(yōu)化建議是早期實現(xiàn)的主要功能,早期的功能還只是停留在建議上,對于一些初級用戶看到建議也不一定會改寫。為了進一步簡化SQL優(yōu)化的成本,SOAR又進一步挖掘了自動SQL重寫的功能?,F(xiàn)在提供幾十種常見場景下的SQL等價轉(zhuǎn)寫,不過相比SQL優(yōu)化建議還有很大的改進空間。這部分的功能和邏輯將在重寫邏輯一章中詳細說明。
工具集
除了SQL優(yōu)化和改寫以外,為了方便用戶使用以及美化輸出展現(xiàn)形式,SOAR還提供了一些輔助的小工具,比如markdown轉(zhuǎn)HTML工具,SQL格式化輸出工具等等。你可以在常用命令中找到這些小工具的使用方法。
SOAR 功能特點
SOAR的功能特點如下:
● 跨平臺支持(支持Linux, Mac環(huán)境,Windows環(huán)境理論上也支持,不過未全面測試)
● 支持基于啟發(fā)式算法的語句優(yōu)化
● 支持復(fù)雜查詢的多列索引優(yōu)化(UPDATE, INSERT, DELETE, SELECT)
● 支持EXPLAIN信息豐富解讀
● 支持SQL指紋、壓縮和美化
● 支持同一張表多條ALTER請求合并
● 支持自定義規(guī)則的SQL改寫
此外,小米的SOAR與業(yè)內(nèi)其他優(yōu)秀產(chǎn)品對比,也有著非常大的優(yōu)勢:
上一篇:SQL Server中Table字典數(shù)據(jù)的查詢SQL示例代碼
欄 目:MsSql
下一篇:SQL Server中通用數(shù)據(jù)庫角色權(quán)限的處理詳解
本文標題:小米正式開源 SQL 智能優(yōu)化與改寫工具 SOAR
本文地址:http://mengdiqiu.com.cn/a1/MsSql/10340.html
您可能感興趣的文章


閱讀排行
本欄相關(guān)
- 01-10SQLServer存儲過程實現(xiàn)單條件分頁
- 01-10SQLServer中防止并發(fā)插入重復(fù)數(shù)據(jù)的方
- 01-10SQL Server 2012降級至2008R2的方法
- 01-10SQL Server性能調(diào)優(yōu)之緩存
- 01-10SQL Server數(shù)據(jù)庫定時自動備份
- 01-10Sql Server 死鎖的監(jiān)控分析解決思路
- 01-10實現(xiàn)SQL Server 原生數(shù)據(jù)從XML生成JSON數(shù)
- 01-10SqlServer快速檢索某個字段在哪些存儲
- 01-10SqlServer 在事務(wù)中獲得自增ID的實例代
- 01-10SQLServer性能優(yōu)化--間接實現(xiàn)函數(shù)索引或
隨機閱讀
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實例總結(jié)
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置