前言
作為DBA或系統管理員,我們有時會遇到一個慢SQL需要優化,但是通過分析執行計划又沒有找到好的優化思路,或者優化之后效果不明顯,沒有達到自己理想的預期,此時的你是不是很焦慮?此時你一定想如果有一個工具能幫自己rewrite SQL和得到一些優化的建議,那該多好啊。SOAR就是你尋找的工具。SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能優化與改寫工具,由小米運維 DBA 團隊出品,SOAR 主要由語法解析器、集成環境、優化建議、重寫邏輯、工具集五大模塊組成,相比業內其他優秀產品有自己的優勢。
1.1、先安裝go語言環境
1、下載安裝包
wget https://studygolang.com/dl/golang/go1.12.5.linux-amd64.tar.gz
2、解壓文件
tar -C /usr/local -xzf go1.12.5.linux-amd64.tar.gz
3、設置變量使之生效
cd ~ vim .profile 在文件末尾添加如下內容: export PATH=$PATH:/usr/local/go/bin :wq source .profile
4、確認版本
go version
1.2 安裝soar
1、下載安裝包
wget https://github.com/XiaoMi/soar/releases/download/0.9.0/soar.linux-amd64 -O /usr/local/soar
2、soar加入到通用路徑
cd ~ vim .bash_profile 在文件中加入如下行: .... export PATH=$PATH:/usr/local/soar/bin ....
1.3 安裝soar web界面
1.3.1安裝
1、下載安裝鏡像
docker pull becivells/soar-web
2、啟動docker
docker run -d --name soar-web -p 5077:5077 becivells/soar-web
1.3.2 訪問及配置
1、瀏覽器輸入 http://xx.xx.xx.xx:5077即可進入配置界面
2、驗證
1.3.3 配置說明及注意事項
1、關於存儲: 所有的配置都是保存在瀏覽器 Local Storage 中的,多人之間使用是互補影響的,自己只能看到自己的配置,更換瀏覽器或者清除瀏覽器會造成配置丟失。 2、配置模板: 可以添加多數據庫連接實例及配置,方便在 sql 評估的相互切換使用,具體配置項詳情見https://github.com/XiaoMi/soar/blob/master/doc/config.md 。
3、線上線下環境問題: 線上環境作為待 sql 評估環境,soar 在進行 sql 評估時,會根據 sql 語句,從 線上環境的數據庫連接實例 拷貝數據表到 測試環境的數據庫連接實例,然后在測試環境下執行 sql 語句進行分析。因此測試環境的數據庫連接實例需要有最高權限。如果無法沒有最高權限可能造成一些問題,如果沒有權限可以啟動一個空的 mysql docker 容器作為測試環境。如果僅僅做測試用,可將線上線下環境指定為一樣。 4、日志等級: 日志等級為 0 時不打印日志,設置為 1-7 時,會將 soar 產生的日志打印至控制台,按 F12 或右擊網頁點擊審查元素打開調試工具,點擊 Console 按鈕查看日志。
1.4 舉例說明
1、SQL分析選項卡界面輸入要優化的SQL,如下圖所示:
2、點擊SQL評估之后,系統會對當前的SQL給出優化的建議,如下圖所示:
輸出說明:
-
查詢語句中用in代替or效果更好。
-
存儲IP地址建議用整數,而不是字符型,效率更高,此例中的IP地址用的是字符型。
二、其他
在遇到SQL沒有優化思路時,可以嘗試用用此工具,可能會給你不一樣的思路。