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
注意
- 跟据glib安装的路径,修改SQLAdvisor/sqladvisor/CMakeLists.txt中的两处include_directories针对glib设置的path。glib yum 安装默认不需要修改路径
- 编译sqladvisor时依赖perconaserverclientr, 因此需要安装Percona-Server-shared-56。有可能需要配置软链接例如:1. cd /usr/lib64/ 2. ln -s libperconaserverclientr.so.18 libperconaserverclient_r.so
- 有可能需要配置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
注意
- DCMAKEINSTALLPREFIX为sqlparser库文件和头文件的安装目录,其中lib目录包含库文件libsqlparser.so,include目录包含所需的所有头文件。
- 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/