SQLAdvisor 编译安装

SQLAdvisor  

SQLAdvisor

SQLAdvisor是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具。它基于MySQL原生态词法解析,结合分析SQL中的where条件、聚合条件、多表Join关系 给出索引优化建议。目前SQLAdvisor在美团点评内部广泛应用,公司内部对SQLAdvisor的开发全面转到github上,开源和内部使用保持一致。
Github: https://github.com/Meituan-Dianping/SQLAdvisor

编译安装

1.1 拉取最新代码

cd /opt/  
git clone https://github.com/Meituan-Dianping/SQLAdvisor.git  

1.2 安装依赖项

yum install cmake libaio-devel libffi-devel glib2 glib2-devel gcc-c++  bison -y  
wget https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-5.6.25-73.1/binary/redhat/6/x86_64/Percona-Server-5.6.25-73.1-r07b797f-el6-x86_64-bundle.tar  
tar -xvf Percona-Server-5.6.25-73.1-r07b797f-el6-x86_64-bundle.tar  
rpm -ivh Percona-Server-shared-56-5.6.25-rel73.1.el6.x86_64.rpm  

注意

  1. 跟据glib安装的路径,修改SQLAdvisor/sqladvisor/CMakeLists.txt中的两处include_directories针对glib设置的path。glib yum 安装默认不需要修改路径
  2. 编译sqladvisor时依赖perconaserverclientr, 因此需要安装Percona-Server-shared-56。有可能需要配置软链接例如:1. cd /usr/lib64/ 2. ln -s libperconaserverclientr.so.18 libperconaserverclient_r.so
  3. 有可能需要配置percona56 yum源: yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

1.3 编译依赖项sqlparser

cd /opt/SQLAdvisor  
cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr/local/sqlparser ./  
make && make install  

注意

  1. DCMAKEINSTALLPREFIX为sqlparser库文件和头文件的安装目录,其中lib目录包含库文件libsqlparser.so,include目录包含所需的所有头文件。
  2. DCMAKEINSTALLPREFIX值尽量不要修改,后面安装依赖这个目录。

1.4 安装SQLAdvisor源码

cd SQLAdvisor/sqladvisor/  
cmake -DCMAKE_BUILD_TYPE=debug ./  
make  
在本路径下生成一个sqladvisor可执行文件,这即是我们想要的。
cp sqladvisor /usr/bin/  

注意

如果sqlparser出现include 无法找到,可以从/opt/SQLAdvisor/include/下面copy过去

2. SQLAdvisor使用

2.1 --help输出

./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.2 命令行传参调用

./sqladvisor -h xx  -P xx  -u xx -p 'xx' -d xx -q "sql" -v 1
注意:命令行传参时,参数名与值需要用空格隔开

2.3 配置文件传参调用

$> cat sql.cnf
[sqladvisor]
username=xx  
password=xx  
host=xx  
port=xx  
dbname=xx  
sqls=sql1;sql2;sql3....

cmd: ./sqladvisor -f sql.cnf  -v 1  

2.4 测试

sqladvisor -h 127.0.0.1  -P 3306  -u root -p '123456' -d opensa -q "select * from asset;" -v 1  
2019-04-17 09:57:29 46369 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `*` AS `*` from `opensa`.`asset` 

2019-04-17 09:57:29 46369 [Note] 第2步:表asset 的SQL太逆天,没有优化建议 

2019-04-17 09:57:29 46369 [Note] 第3步: SQLAdvisor结束!

懒人必备!!Centos 7已经编译好的可以直接使用

cd /usr/bin  
wget -q http://softimdst.oss-cn-beijing.aliyuncs.com/opensa/sqladvisor  
chmod +x sqladvisor  
cd /usr/lib64  
wget -q http://softimdst.oss-cn-beijing.aliyuncs.com/opensa/libperconaserverclient.so.18.1.0  
ln -s  libperconaserverclient.so.18.1.0 libperconaserverclient.so.18  
cd /tmp  
wget -q http://softimdst.oss-cn-beijing.aliyuncs.com/opensa/sqlparser.tar.gz  
tar zxf sqlparser.tar.gz -C /usr/local/