SQL最佳化工具(MYSQL)——SQLAdvisor安裝使用

yepkeepmoving發表於2017-03-12
一、SQLAdvisor簡介
SQLAdvisor是由美團點評公司技術工程部DBA團隊(北京)開發維護的一個分析SQL給出索引最佳化建議的工具。它基於MySQL原生態詞法解析,結合分析SQL中的where條件、聚合條件、多表Join關係 給出索引最佳化建議。目前SQLAdvisor在美團點評廣泛應用,包括美團支付、酒店旅遊、外賣、團購等產品線,公司內部對SQLAdvisor的開發全面轉到github上,開源和內部使用保持一致。

主要功能:輸出SQL索引最佳化建議

專案 GitHub 地址:

二、SQLAdvisor安裝
1、依賴包安裝
rpm -q cmake libaio-devel libffi-devel glib2 glib2-devel
yum   install cmake libaio-devel libffi-devel glib2 glib2-devel
yum   install --enablerepo=Percona56 Percona-Server-shared-56   (如安裝percona資料庫,可透過軟連結形式實現庫檔案建立,ln -s /usr/local/mysql/lib/libperconaserverclient.so.18  /usr/lib64/libperconaserverclient.so、)
注意
跟據glib安裝的路徑,修改SQLAdvisor/sqladvisor/CMakeLists.txt中的兩處include_directories針對glib設定的path。glib yum 安裝預設不需要修改路徑
編譯sqladvisor時依賴perconaserverclient_r, 因此需要安裝Percona-Server-shared-56。有可能需要配置軟連結例如:1. cd /usr/lib64/ 2. ln -s libperconaserverclient_r.so.18 libperconaserverclient_r.so
有可能需要配置percona56 yum源: yum install
2、軟體包下載

git clone
3、軟體包安裝
(1)解壓安裝包
unzip SQLAdvisor-master.zip
(2)安裝sqlparser解析
cd SQLAdvisor-master
cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr/local/sqlparser ./
make
make install
注意:
DCMAKE_INSTALL_PREFIX為sqlparser庫檔案和標頭檔案的安裝目錄,其中lib目錄包含庫檔案libsqlparser.so,include目錄包含所需的所有標頭檔案。
DCMAKE_INSTALL_PREFIX值儘量不要修改,後面安裝依賴這個目錄。
(3)安裝sqladvisor
cd sqladvisor/
cmake -DCMAKE_BUILD_TYPE=debug ./
make
##此時在編譯目錄生成可執行檔案sqladvisor,可以透過ln -s sqladvisor /usr/bin/這種方式放入PATH路徑中,可以透過./sqladvisor執行
三、SQLAdvisor使用
1、命令幫助文件檢視
[root@node1 ~]# sqladvisor  --help
Usage:
  sqladvisor [OPTION...] sqladvisor

SQL Advisor Summary

Help Options:
  -?, --help              Show help options

Application Options:
  -f, --defaults-file     sqls file
  -u, --username          username
  -p, --password          password
  -P, --port              port
  -h, --host              host
  -d, --dbname            database name
  -q, --sqls              sqls
  -v, --verbose           1:output logs 0:output nothing
2、命令列執行SQLAdvisor
[root@node1 sqladvisor]# sqladvisor  -h 10.1.0.10 -u dbuser -p abc.1234 -P 3306 -d dbtest -q "select * from t2 where id=3;" -v 1
2017-03-12 08:32:31 23537 [Note] 第1步: 對SQL解析最佳化之後得到的SQL:select `*` AS `*` from `dbtest`.`t2` where (`id` = 3)
2017-03-12 08:32:31 23537 [Note] 第2步:開始解析where中的條件:(`id` = 3)
2017-03-12 08:32:31 23537 [Note] show index from t2
2017-03-12 08:32:31 23537 [Note] 第3步:SQLAdvisor結束!表中沒有任何索引
3、SQLAdvisor配合引數檔案使用
[root@node1 sqladvisor]# cat sql.cnf
[sqladvisor]
username=dbuser
password=abc.1234
host=10.1.0.10
port=3306
dbname=dbtest
sqls=select * from t2 where id=3;

[root@node1 sqladvisor]# sqladvisor  -f sql.cnf -v 1
2017-03-12 08:34:03 24195 [Note] 第1步: 對SQL解析最佳化之後得到的SQL:select `*` AS `*` from `dbtest`.`t2` where (`id` = 3)
2017-03-12 08:34:03 24195 [Note] 第2步:開始解析where中的條件:(`id` = 3)
2017-03-12 08:34:03 24195 [Note] show index from t2
2017-03-12 08:34:03 24195 [Note] 第3步:SQLAdvisor結束!表中沒有任何索引

四、SQLAdvisor附錄
1、錯誤資訊以及解決方案
錯誤資訊01:
Scanning dependencies of target sqladvisor
[100%] Building CXX object CMakeFiles/sqladvisor.dir/main.cc.o
Linking CXX executable sqladvisor
/usr/bin/ld: cannot find -lperconaserverclient_r
collect2: ld returned 1 exit status
make[2]: *** [sqladvisor] Error 1
make[1]: *** [CMakeFiles/sqladvisor.dir/all] Error 2
make: *** [all] Error 2
##由於缺少percona的庫檔案libperconaserverclient_r.so或者在/usr/lib64下不存在,解決方案就是安裝percona庫檔案包或透過軟連結形式ln -s libperconaserverclient_r.so.18 libperconaserverclient_r.so
2、結構流程圖(參考原始碼文件)




來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27067062/viewspace-2135172/,如需轉載,請註明出處,否則將追究法律責任。

相關文章