「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能優化與改寫工具,由小米運維 DBA 團隊出品。

開發人員可以直接通過此工具快速的對自己的SQL進行質量檢查,生成評估報告,防止將問題SQL帶到線上從而導致服務質量下降。它不僅能夠儘可能地提高線上代碼質量,還能避免一些由於人為疏漏而帶來的隱患。。

使用SOAR,媽媽再也不用擔心你不會寫SQL了。

特色

SOAR由語法解析器、集成環境、優化建議、重寫邏輯、工具集五大模塊組成。它擁有獨立的不依賴數據庫的SQL解析能力,能夠通過提供的集成環境對SQL本身及數據庫環境進行評審,找出可能存在的隱患或問題。

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

SOAR中結合了大量書籍文獻,吸納了專家們的寶貴經驗,將SQL優化方法論轉化為服務。SOAR使用Go語言開發,參考業界公認的數據庫編程規範,不僅能夠指出常見的100多種SQL質量問題,也可對複雜查詢給出索引優化建議,並且提供了幾十種類型SQL的自動改寫能力;SOAR的啟發式策略是動態可插拔的,即可根據需求定製適合的編程規範,亦可針對不同場景進行靈活配置;SOAR還能夠對SQL語句輸出EXPLAIN信息解讀,協助DBA或開發者快速診斷SQL。

為了進一步方便使用,小米DBA還基於SOAR提供了常用的編輯器插件,能夠在編寫SQL語句時實時給予修改建議。

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

用戶還可以基於SOAR豐富的配置來定製喜歡的使用展現形式。比如小米DBA在內部SQL自動化平臺中基於SOAR提供了web端的SQL自助審核工具。

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

除了SQL優化和改寫以外,為了方便用戶使用以及美化輸出展現形式,SOAR還提供了一些輔助的小工具,比如markdown轉HTML工具,SQL格式化輸出工具等等。

安裝

SOAR使用Go語言編寫,天然具備操作系統跨平臺屬性,您可以在Github上的Release版本按照對應操作系統直接下載編譯好的二進制文件使用。

二進制安裝

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

源碼安裝

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

使用

快速上手

安裝完成之後無需進行任何配置,只需要執行下面這條命令,就可以立刻生成一份Markdown格式的SQL評審報告,根據報告中的建議對SQL進行修改。

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

使用配置

SOAR提供了豐富的配置參數,可以根據不同的使用場景指定不同的配置項來定製私有的評審建議。不過您也無須擔心這些配置會對使用帶來困擾,大部分配置選項是為有特殊需求用戶準備的,即使不做任何配置也能夠體驗到SOAR的基礎的功能。

SOAR的配置文件為YAML[1]格式,在一般情況下只需要配置online-dsn, test-dsn, log-output等少數幾個參數,您就可以體驗到SOAR提供的絕大部分的功能了。

下面我將介紹一下SOAR中常用的一些基礎配置。

配置環境

由於很多的功能需要數據庫的元數據來進行輔助判斷,所以當不指定數據庫環境的時候,很多功能將會採取降級的策略,所以我們強烈建議您在配置文件中指定相關數據庫環境。為了保護線上數據庫的安全,我們將數據庫環境區分為線上和測試兩種環境,但是這並不意味著您一定需要兩個數據庫環境,但至少建議您指定一個測試環境。


「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

這裡需要注意的是,因為我們會在測試環境中做一些風險相對較高的操作,為了防止用戶由於配置疏忽導致線上數據受損,我們添加了allow-online-as-test參數來保證您確實是希望將線上環境做為測試環境來使用。所以當您指定的兩個集成環境相同時,請指定allow-online-as-test為true,否則SOAR將不會進行評審。

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

輸出格式

SOAR自身支持了非常豐富的輸出格式,除了默認的Markdown格式以外,SOAR還支持以 HTML或JSON的格式進行輸出。

SOAR自帶的一些工具也會以report-type的形式提供。比如SQL重寫,EXPLAIN分析,SQL 指紋,SQL美化等15種輸出格式,每一種report-type都對應著不同的功能。你可以通過如下命令查看SOAR支持的輸出類型。

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

獲取幫助

除了上述提到的這些功能,SOAR還提供了很多其他的配置項,由於篇幅所限,具體詳情您可以到SOAR項目文檔中查看。

場景介紹

「數據庫」SOAR——SQL智能優化與改寫神器,讓你成為DBA高手

場景一

這個場景是我們日常工作中最常見的場景,它主要應用於線上服務日常創建表或表結構表更。

SOAR對SQL進行分析時,會先從SQL語句中獲取基本信息,然後將所有涉及到的庫表結構元數據從線上環境中獲取,並同步到測試環境中進行更進一步的分析。在這個場景下,SOAR能提供最全面的功能支持。不僅能夠輸出110多項SQL檢查,還能夠對涉及到的庫表進行索引分析,而且還可以輸出EXPLAIN、PROFILE等信息來輔助DBA或開發者進行性能調優和問題定位。SQL改寫也會依賴元數據的支持,在此場景下的功能是支持的最全面的。

場景二

這個場景適用於首次申請數據庫資源的情況,此時還沒有已經存在的線上環境與之相對應。

在這個場景下,SQL文件主要包含的是建庫建表語句,SOAR會根據DDL生成相應的測試環境,並從該環境中獲取元數據進行優化分析。

場景三

在這一場景下由於沒有配置線上環境和測試環境依賴,缺少很多分析時必要的元數據,且無法獲取EXPLAIN等信息,在這種情況下SOAR將會進行功能降級,只給予部分不依賴數據庫環境才能給出的建議(絕大部分的啟發式建議和小部分SQL改寫)。

雖然在這個場景下服務的功能並不全面,但執行速度也是最快的,這種場景依然能提供110多種啟發式建議,特別適合於對SQL本身的檢測,比如作為一個本地化的SQL Linter IDE插件。

場景四

這一場景其實與場景二是一樣的,在這一場景下只配置了線上環境,且開啟了允許線上環境作為測試環境。那麼在不指定測試環境的情況下SOAR將會把測試環境也指向線上環境。

SOAR在進行評審時,為了保證多個客戶端能夠同時在一個環境內進行評審,會在測試環境中生成一個臨時數據庫,評審正常結束後再將該臨時數據庫刪除。所以我們非常不建議將線上數據庫環境做為測試環境,防止在某些未知的極端條件下對數據庫產生嚴重影響。

參考

[1]https://en.wikipedia.org/wiki/YAML

[2]https://github.com/XiaoMi/soar/issues

[3]https://gitter.im/xiaomi-dba/soar


分享到:


相關文章: