本文簡述了SOAR的下載安裝和使用方法,並介紹了SOAR的基礎設置和應用的四個場景。
上篇文章回顧: 基於線性迴歸的故障恢復時間預測
在10月20日的開源先鋒日(OSCAR)上,小米開源了自研的SOAR(SQL Optimizer And Rewriter),點擊查看「開源地址」。這是一款智能SQL優化和改寫工具,開發人員能夠直接經過此工具快速的對本身的SQL進行質量檢查,生成評估報告,防止將問題SQL帶到線上從而致使服務質量降低。它不只可以儘量地提升線上代碼質量,還能避免一些因爲人爲疏漏而帶來的隱患。
git
SOAR使用Go語言編寫,自然具有操做系統跨平臺屬性,您能夠在Github上的Release版本按照對應操做系統直接下載編譯好的二進制文件使用。若是您是資深定製用戶也能夠「點擊此處」下載代碼,按下圖所示編譯安裝。github
安裝完成以後無需進行任何配置,只須要執行下面這條命令,就能夠馬上生成一份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在進行評審時,爲了保證多個客戶端可以同時在一個環境內進行評審,會在測試環境中生成一個臨時數據庫,評審正常結束後再將該臨時數據庫刪除。因此咱們很是不建議將線上數據庫環境作爲測試環境,防止在某些未知的極端條件下對數據庫產生嚴重影響。
參考
[1]https://en.wikipedia.org/wiki/YAML
[2]https://github.com/XiaoMi/soar/issues
[3]https://gitter.im/xiaomi-dba/soar
本文首發於公衆號「小米運維」,點擊查看原文