注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

SQLAdvisor,一个分析SQL给出索引优化建议的工具  

2017-03-10 15:58:20|  分类: MySQL |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
原文:https://github.com/Meituan-Dianping/SQLAdvisor



 原文有些地方说的不明白,1.3步之前需要先执行 cd SQLAdvisor   比如:2. yum | apt-get  install --enablerepo=Percona56 Percona-Server-shared-56
中--enablerepo=Percona56可以去掉,否则报错


下面是我的安装步骤:
1. SQLAdvisor安装

1.1 拉取最新代码

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

1.2 安装依赖项

 1. yum install cmake libaio-devel libffi-devel glib2 glib2-devel
 2. yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
    yum install Percona-Server-shared-56


1. cd /usr/lib64/ 
2. ln -s libperconaserverclient_r.so.18 libperconaserverclient_r.so



1.3 编译依赖项sqlparser
0. cd SQLAdvisor
1. cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr/local/sqlparser ./
2. make && make install


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


1.4 安装SQLAdvisor源码
1. cd SQLAdvisor/sqladvisor/
2. cmake -DCMAKE_BUILD_TYPE=debug ./
3. make
4. 在本路径下生成一个sqladvisor可执行文件,这即是我们想要的,这个文件可以复制到自己想要的任何地方。




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

我的使用例子:
[root@db sqladv]# ./sqladvisor -f sql.cnf -q "select * from test.t2" -v 1
2017-03-10 15:39:24 18932 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `*` AS `*` from `test`.`t2` 

2017-03-10 15:39:24 18932 [Note] 第2步:表t2 的SQL太逆天,没有优化建议 

2017-03-10 15:39:24 18932 [Note] 第3步: SQLAdvisor结束! 


[root@db sqladv]# ./sqladvisor -f sql.cnf -q "select * from test.t2 where id=2" -v 1
2017-03-10 15:39:39 18936 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `*` AS `*` from `test`.`t2` where (`id` = 2) 

2017-03-10 15:39:39 18936 [Note] 第2步:开始解析where中的条件:(`id` = 2) 

2017-03-10 15:39:40 18936 [Note] show index from t2 

2017-03-10 15:39:40 18936 [Note] show table status like 't2' 

2017-03-10 15:39:40 18936 [Note] select count(*) from ( select `id` from `t2` FORCE INDEX( PRIMARY ) order by id DESC limit 1) `t2` where (`id` = 2)  

2017-03-10 15:39:40 18936 [Note] 第3步:表t2的行数:2,limit行数:1,得到where条件中(`id` = 2)的选择度:1 

2017-03-10 15:39:40 18936 [Note] 第4步:表t2 的SQL太逆天,没有优化建议 

2017-03-10 15:39:40 18936 [Note] 第5步: SQLAdvisor结束! 


  评论这张
 
阅读(204)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017