小米soar

SOAR 簡介linux

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

SOAR 體系架構github

SOAR主要由語法解析器,集成環境,優化建議,重寫邏輯,工具集五大模塊組成。算法

語法解析和語法檢查數據庫

一條SQL從文件,標準輸入或命令行參數等形式傳遞給SOAR後首先進入語法解析器,選用了vitess的語法解析庫做爲SOAR的語法解析庫,但隨時需求的不斷增長咱們發現有些複雜需求使用vitess的語法解析實現起來比較邏輯比較複雜。因而參考業辦其餘數據庫產品,因而引入了TiDB的語法解析器作爲補充。後來發現這兩個解析庫還存在必定的盲區,因而又引入了MySQL執行返回結果做爲多多版本SQL方言的補充。你們也能夠看到在語法解析器這裏,SOAR的實現方案是鬆散的、可插拔的。SOAR並不直接維護龐大的語法解析庫,它把各類優秀的語法解析庫集成在一塊兒,各取所長。安全

集成環境markdown

集成環境區分線上環境和測試環境兩種,分別用於解決不一樣場景下用戶的SQL優化需求。一種常見的狀況是已有表結構須要優化查詢SQL的場景,能夠從線上環境導出表結構和足夠的採樣數據到測試環境,在測試環境上就能夠放心的執行各類高危操做而不用擔憂數據被損壞。另外一種常見的狀況是建一套全新的數據庫,須要驗證提供的數據字典中是否存在優化的可能。對於這種狀況,頗有可能你不須要知道線上環境在哪兒,徹底只是想先試試看,若是報錯了立刻改對就是了。固然還有更多種組合的場景需求,將在集成環境一單分類說明。架構

優化建議運維

目前SOAR能夠提供的優化建議有基於啓發式規則(一般也稱之爲經驗)的優化建議,基於索引優化算法給出的索引優化建議,以及基於EXPLAIN信息給出的解讀。工具

重寫邏輯

上面提到的優化建議是早期實現的主要功能,早期的功能還只是停留在建議上,對於一些初級用戶看到建議也不必定會改寫。爲了進一步簡化SQL優化的成本,SOAR又進一步挖掘了自動SQL重寫的功能。如今提供幾十種常見場景下的SQL等價轉寫,不過相比SQL優化建議還有很大的改進空間。這部分的功能和邏輯將在重寫邏輯一章中詳細說明。

工具集

除了SQL優化和改寫之外,爲了方便用戶使用以及美化輸出展示形式,SOAR還提供了一些輔助的小工具,好比markdown轉HTML工具,SQL格式化輸出工具等等。你能夠在經常使用命令中找到這些小工具的使用方法。

SOAR 功能特色

SOAR的功能特色以下:

● 跨平臺支持(支持Linux, Mac環境,Windows環境理論上也支持,不過未全面測試)

● 支持基於啓發式算法的語句優化

● 支持複雜查詢的多列索引優化(UPDATE, INSERT, DELETE, SELECT)

● 支持EXPLAIN信息豐富解讀

● 支持SQL指紋、壓縮和美化

● 支持同一張表多條ALTER請求合併

● 支持自定義規則的SQL改寫

此外,小米的SOAR與業內其餘優秀產品對比,也有着很是大的優點:

 

二進制安裝

wget https://github.com/XiaoMi/soar/releases/download/0.9.0/soar.linux-amd64 -O soar
chmod a+x soar

快速上手

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

# ./soar -query "select * from tb;"  或 # echo "select * from tb;" | ./soar 

使用配置

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

SOAR的配置文件爲YAML格式,在通常狀況下只須要配置online-dsn, test-dsn, log-output等少數幾個參數,您就能夠體驗到SOAR提供的絕大部分的功能了。

配置環境

因爲不少的功能須要數據庫的元數據來進行輔助判斷,因此當不指定數據庫環境的時候,不少功能將會採起降級的策略,因此咱們強烈建議您在配置文件中指定相關數據庫環境。爲了保護線上數據庫的安全,咱們將數據庫環境區分爲線上和測試兩種環境,可是這並不意味着您必定須要兩個數據庫環境,但至少建議您指定一個測試環境。

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

默認文件會按照/etc/soar.yaml, ./etc/soar.yaml, ./soar.yaml順序加載,找到第一個後再也不繼續加載後面的配置文件。如需指定其餘配置文件能夠經過-config參數指定。 即便不建立配置文件SOAR仍然會給出基本的啓發式建議。

[root@mydb1 ~]# cat /etc/soar.yaml
# 線上環境配置
online-dsn:
  addr: 127.0.0.1:3306
  schema: mytest
  user: dba_user
  password: msds007
  disable: false
# 測試環境配置
test-dsn:
  addr: 127.0.0.1:3306
  schema: test
  user: dba_user
  password: msds007
  disable: false
# 是否容許測試環境與線上環境配置相同
allow-online-as-test: true 

 

https://mp.weixin.qq.com/s/7sj2HnOQsNP_Zf_07C1FFQ?utm_medium=hao.caibaojian.com&utm_source=hao.caibaojian.com 

https://www.bookstack.cn/books/SOAR-zh 

相關文章
相關標籤/搜索