1.SQLAdvisor简介
在数据库运维过程中,优化SQL是业务团队与DBA团队的日常任务。例行SQL优化,不仅可以提升程序性能,还能够降低线上故障的概率。
目前常用的SQL优化方式包括但不限于:业务层优化、SQL逻辑优化、索引优化等。其中索引优化通常通过调整索引或新增索引从而达到SQL优化的目的。索引优化往往可以在短时间内产生非常巨大的效果。如果能够将索引优化转化成工具化、标准化的流程,减少人工介入的工作量,无疑会大大提高DBA的工作效率
SQLAdvisor是由美团点评公司DBA团队(北京)开发维护的SQL优化工具:输入SQL,输出索引优化建议。 它基于MySQL原生词法解析,再结合SQL中的where条件以及字段选择度、聚合条件、多表Join关系等最终输出最优的索引优化建议。目前SQLAdvisor在公司内部大量使用,较为成熟、稳定。
美团点评致力于将SQLAdvisor打造成一款高智能化SQL优化工具,选择将已经在公司内部使用较为成熟的、稳定的SQLAdvisor项目开源,github地址。希望与业内有类似需求的团队,一起打造一款优秀的SQL优化产品。
SQLAdvisor架构流程图:
2.安装与配置
1)首先,安装依赖软件包
# yum install cmake libaio-devel libffi-devel glib2 glib2-devel
# yum install --enablerepo=Percona56 Percona-Server-shared-56
2)下载源码
git clone https://github.com/Meituan-Dianping/SQLAdvisor.git
注意
- 跟据glib安装的路径,修改SQLAdvisor/sqladvisor/CMakeLists.txt中的两处include_directories针对glib设置的path。glib yum 安装默认不需要修改路径
- 编译sqladvisor时依赖perconaserverclient_r, 因此需要安装Percona-Server-shared-56。有可能需要配置软链接如下:
# cd /usr/lib64/
# ln -s libperconaserverclient_r.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
# wget http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
# yum install percona-release-0.1-3.noarch.rpm
# yum install Percona-Server-shared-56
3)编译依赖项sqlparser
# 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值尽量不要修改,后面安装依赖这个目录。
4)安装SQLAdvisor源码
# cd SQLAdvisor/sqladvisor/
# cmake -DCMAKE_BUILD_TYPE=debug ./
# make # 在本路径下生成一个sqladvisor可执行文件,这即是我们想要的。
3.SQLAdvisor使用
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)命令行传参调用
# ./sqladvisor -h xx -P xx -u xx -p 'xx' -d xx -q "sql" -v 1
注意:命令行传参时,参数名与值需要用空格隔开
3)配置文件传参调用
# 编辑配置文件
# vim sql.cnf
[sqladvisor]
username=xx
password=xx
host=xx
port=xx
dbname=xx
sqls=sql1;sql2;sql3....
# 应用配置文件
# ./sqladvisor -f sql.cnf -v 1
4)测试验证实例
# cp /usr/local/src/SQLAdvisor/sqladvisor/sqladvisor /usr/bin/sqladvisor
# sqladvisor -h 127.0.0.1 -P 3306 -u root -p '123456' -d test -q "sql语句" -v 1
通过配置文件简化命令调用
#vim /etc/sql.cnf
[sqladvisor]
username=xxx
password=xxx
host=xxx
port=xxx
dbname=xxx
#sqladvisor -f /etc/sql.cnf -q "sql语句" -v 1
至此,SQLAdvisor安装与配置完成!
使用时需要注意的问题:
Q1: SQLAdvisor支持哪些SQL
insert、update、delete、select、insert select 、select join、update t1 t2 等常见SQL有支持
Q2: SQLAdvisor需要注意的地方
- SQL中的子查询、or条件、使用函数的条件 会忽略不处理。
- 命令行传入sql参数时,注意sql中的双引号、反引号 都需要用\转义。建议使用配置文件形式调用