SOAR 使用指南
- 2019 年 11 月 24 日
- 筆記
「
本文簡述了SOAR的下載安裝和使用方法,並介紹了SOAR的基礎設置和應用的四個場景。
上篇文章回顧:基於線性回歸的故障恢復時間預測
」
在10月20日的開源先鋒日(OSCAR)上,小米開源了自研的SOAR(SQL Optimizer And Rewriter)。這是一款智慧SQL優化和改寫工具,開發人員可以直接通過此工具快速的對自己的SQL進行品質檢查,生成評估報告,防止將問題SQL帶到線上從而導致服務品質下降。它不僅能夠儘可能地提高線上程式碼品質,還能避免一些由於人為疏漏而帶來的隱患。
下載安裝
SOAR使用Go語言編寫,天然具備作業系統跨平台屬性,您可以在Github上的Release版本按照對應作業系統直接下載編譯好的二進位文件使用。如果您是資深訂製用戶也可以參見左下方「閱讀原文」下載程式碼,按下圖所示編譯安裝。
二進位安裝

源碼安裝

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


使用配置
SOAR提供了豐富的配置參數,可以根據不同的使用場景指定不同的配置項來訂製私有的評審建議。不過您也無須擔心這些配置會對使用帶來困擾,大部分配置選項是為有特殊需求用戶準備的,即使不做任何配置也能夠體驗到SOAR的基礎的功能。
SOAR的配置文件為YAML[1]格式,在一般情況下只需要配置online-dsn, test-dsn, log-output等少數幾個參數,您就可以體驗到SOAR提供的絕大部分的功能了。
下面我將介紹一下SOAR中常用的一些基礎配置。
配置環境
由於很多的功能需要資料庫的元數據來進行輔助判斷,所以當不指定資料庫環境的時候,很多功能將會採取降級的策略,所以我們強烈建議您在配置文件中指定相關資料庫環境。為了保護線上資料庫的安全,我們將資料庫環境區分為線上和測試兩種環境,但是這並不意味著您一定需要兩個資料庫環境,但至少建議您指定一個測試環境。

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

輸出格式
SOAR自身支援了非常豐富的輸出格式,除了默認的Markdown格式以外,SOAR還支援以 HTML或JSON的格式進行輸出。
SOAR自帶的一些工具也會以report-type的形式提供。比如SQL重寫,EXPLAIN分析,SQL 指紋,SQL美化等15種輸出格式,每一種report-type都對應著不同的功能。你可以通過如下命令查看SOAR支援的輸出類型。

獲取幫助
除了上述提到的這些功能,SOAR還提供了很多其他的配置項,由於篇幅所限,具體詳情您可以到SOAR項目文檔中查看。使用上如果碰到疑問,可以到這裡[2]提交Issue,或在Gitter[3]中聯繫我們。
場景介紹
場景 |
線上環境 |
測試環境 |
應用類型 |
---|---|---|---|
場景一 |
有 |
有 |
日常優化,完整的建議,推薦 |
場景二 |
無 |
有 |
新申請資源,環境初始化測試 |
場景三 |
無 |
無 |
盲測,試用,無EXPLAN和索引建議 |
場景四 |
有 |
無 |
用線上環境當測試環境,不推薦 |
場景一
這個場景是我們日常工作中最常見的場景,它主要應用於線上服務日常創建表或表結構表更。
SOAR對SQL進行分析時,會先從SQL語句中獲取基本資訊,然後將所有涉及到的庫表結構元數據從線上環境中獲取,並同步到測試環境中進行更進一步的分析。在這個場景下,SOAR能提供最全面的功能支援。不僅能夠輸出110多項SQL檢查,還能夠對涉及到的庫表進行索引分析,而且還可以輸出EXPLAIN、PROFILE等資訊來輔助DBA或開發者進行性能調優和問題定位。SQL改寫也會依賴元數據的支援,在此場景下的功能是支援的最全面的。
場景二
這個場景適用於首次申請資料庫資源的情況,此時還沒有已經存在的線上環境與之相對應。
在這個場景下,SQL文件主要包含的是建庫建表語句,SOAR會根據DDL生成相應的測試環境,並從該環境中獲取元數據進行優化分析。
場景三
在這一場景下由於沒有配置線上環境和測試環境依賴,缺少很多分析時必要的元數據,且無法獲取EXPLAIN等資訊,在這種情況下SOAR將會進行功能降級,只給予部分不依賴資料庫環境才能給出的建議(絕大部分的啟發式建議和小部分SQL改寫)。
雖然在這個場景下服務的功能並不全面,但執行速度也是最快的,這種場景依然能提供110多種啟發式建議,特別適合於對SQL本身的檢測,比如作為一個本地化的SQL Linter IDE插件。
場景四
這一場景其實與場景二是一樣的,在這一場景下只配置了線上環境,且開啟了允許線上環境作為測試環境。那麼在不指定測試環境的情況下SOAR將會把測試環境也指向線上環境。
SOAR在進行評審時,為了保證多個客戶端能夠同時在一個環境內進行評審,會在測試環境中生成一個臨時資料庫,評審正常結束後再將該臨時資料庫刪除。所以我們非常不建議將線上資料庫環境做為測試環境,防止在某些未知的極端條件下對資料庫產生嚴重影響。