SQLadvisor安装测试

SQLAdvisor的安装测试

在数据库运维过程中,优化SQL是业务团队与DBA团队的日常任务。例行SQL优化,不仅可以提升程序性能,还能够降低线上故障的概率。
目前常用的SQL优化方式包括但不限于:业务层优化、SQL逻辑优化、索引优化等。其中索引优化通常通过调整索引或新增索引从而达到SQL优化的目的。索引优化往往可以在短时间内产生非常巨大的效果。如果能够将索引优化转化成工具化、标准化的流程,减少人工介入的工作量,无疑会大大提高DBA的工作效率
SQLAdvisor是由美团点评公司DBA团队(北京)开发维护的SQL优化工具:输入SQL,输出索引优化建议。 它基于MySQL原生词法解析,再结合SQL中的where条件以及字段选择度、聚合条件、多表Join关系等最终输出最优的索引优化建议。目前SQLAdvisor在公司内部大量使用,较为成熟、稳定。
美团点评致力于将SQLAdvisor打造成一款高智能化SQL优化工具,选择将已经在公司内部使用较为成熟的、稳定的SQLAdvisor项目开源,github地址。希望与业内有类似需求的团队,一起打造一款优秀的SQL优化产品。
目前SQLAdvisor在美团点评内部广泛应用,公司内部对SQLAdvisor的开发全面转到github上,开源和内部使用保持一致。
主要功能:输出SQL索引优化建议

安装前准备

准备好安装包和依赖包
 
$ git clone https://github.com/Meituan-Dianping/SQLAdvisor.git
 
$ yum install cmake libaio-devel libffi-devel glib2 glib2-devel
$ yum install --enablerepo=Percona56 Percona-Server-shared-56
注意

安装步骤

1、编译依赖项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值尽量不要修改,后面安装依赖这个目录。
2、安装SQLAdvisor源码
 
$ cd SQLAdvisor/sqladvisor/
$ cmake -DCMAKE_BUILD_TYPE=debug ./
$ make
在本路径下会生成一个sqladvisor可执行文件,这即是我们想要的。


SQLAdvisor使用

准备:
在目标库上面:
grant all privileges on *.* to 'sql'@'192.168.127.129' dentified by '123123';
开放防火墙
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
注意:命令行传参时,参数名与值需要用空格隔开
主要针对select和DML语句
a.select 
 
[root@nicole sqladvisor]# ./sqladvisor -h 192.168.127.128  -P 3306  -u sql -p '123123' -d sqladv -q "update t2 set name='haha' where id = 1;" -v 1
2017-07-16 00:15:57 3294 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `name` AS `name` from `sqladv`.`t2` where (`id` = 1) 
2017-07-16 00:15:57 3294 [Note] 第2步:开始解析where中的条件:(`id` = 1) 
2017-07-16 00:15:57 3294 [Note] show index from t2 
2017-07-16 00:15:57 3294 [Note] show table status like 't2' 
2017-07-16 00:15:57 3294 [Note] select count(*) from ( select `id` from `t2` FORCE INDEX( PRIMARY ) order by id DESC limit 10000) `t2` where (`id` = 1)  
2017-07-16 00:15:57 3294 [Note] 第3步:表t2的行数:24284,limit行数:10000,得到where条件中(`id` = 1)的选择度:10000 
2017-07-16 00:15:57 3294 [Note] 第4步:开始验证 字段id是不是主键。表名:t2 
2017-07-16 00:15:57 3294 [Note] show index from t2 where Key_name = 'PRIMARY' and Column_name ='id' and Seq_in_index = 1 
2017-07-16 00:15:57 3294 [Note] 第5步:字段id是主键。表名:t2 
2017-07-16 00:15:57 3294 [Note] 第6步:表t2 经过运算得到的索引列首列是主键,直接放弃,没有优化建议 
2017-07-16 00:15:57 3294 [Note] 第7步: SQLAdvisor结束! 

多表查询
 
2017-07-16 00:37:37 3776 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `t2`.`name` AS `name` from `sqladv`.`t2` join `sqladv`.`test1` where (`t2`.`id` = `test1`.`ID`) 
2017-07-16 00:37:37 3776 [Note] 第2步:开始解析join on条件:t2.id=test1.ID 
2017-07-16 00:37:37 3776 [Note] 第3步:开始选择驱动表,一共有2个候选驱动表 
2017-07-16 00:37:37 3776 [Note] explain select * from t2 
段错误 (core dumped)       -------(系统问题待解决)
b.update
 
[root@nicole sqladvisor]# ./sqladvisor -h 192.168.127.128  -P 3306  -u sql -p '123123' -d sqladv -q "update t2 set name='haha' where name = 'chenlei';" -v 1
2017-07-15 23:53:43 2689 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `name` AS `name` from `sqladv`.`t2` where (`name` = 'chenlei') 
2017-07-15 23:53:43 2689 [Note] 第2步:开始解析where中的条件:(`name` = 'chenlei') 
2017-07-15 23:53:43 2689 [Note] show index from t2 
2017-07-15 23:53:43 2689 [Note] show table status like 't2' 
2017-07-15 23:53:43 2689 [Note] select count(*) from ( select `name` from `t2` FORCE INDEX( PRIMARY ) order by id DESC limit 10000) `t2` where (`name` = 'chenlei')  
2017-07-15 23:53:43 2689 [Note] 第3步:表t2的行数:24284,limit行数:10000,得到where条件中(`name` = 'chenlei')的选择度:6 
2017-07-15 23:53:43 2689 [Note] 第4步:表t2 的SQL太逆天,没有优化建议 
2017-07-15 23:53:43 2689 [Note] 第5步: SQLAdvisor结束!
c.delete
 
[root@nicole sqladvisor]# ./sqladvisor -h 192.168.127.128  -P 3306  -u sql -p '123123' -d sqladv -q "delete from t2 where name = 'chenlei';" -v 1
2017-07-16 00:57:50 4581 [Note] 第1步: 对SQL解析优化之后得到的SQL:select  from dual where (`name` = 'chenlei') 
2017-07-16 00:57:50 4581 [Note] 第2步:开始解析where中的条件:(`name` = 'chenlei') 
2017-07-16 00:57:50 4581 [Note] show index from t2 
2017-07-16 00:57:50 4581 [Note] show table status like 't2' 
2017-07-16 00:57:50 4581 [Note] select count(*) from ( select `name` from `t2` FORCE INDEX( PRIMARY ) order by id DESC limit 10000) `t2` where (`name` = 'chenlei')  
2017-07-16 00:57:50 4581 [Note] 第3步:表t2的行数:24284,limit行数:10000,得到where条件中(`name` = 'chenlei')的选择度:6 
2017-07-16 00:57:50 4581 [Note] 第4步:表t2 的SQL太逆天,没有优化建议 
2017-07-16 00:57:50 4581 [Note] 第5步: SQLAdvisor结束!
d.DDL语句
 
[root@nicole sqladvisor]# ./sqladvisor -h 192.168.127.128  -P 3306  -u sql -p '123123' -d sqladv -q "alter table  test1 add index idx_sql (name);" -v 1
2017-07-16 00:53:57 4443 [Note] 第1步: 对SQL解析优化之后得到的SQL:select  from dual where 1 having 1 
2017-07-16 00:53:57 4443 [Note] 第2步:表test1 的SQL太逆天,没有优化建议 
2017-07-16 00:53:57 4443 [Note] 第3步: SQLAdvisor结束!

 
[root@nicole sqladvisor]# ./sqladvisor -h 192.168.127.128  -P 3306  -u sql -p '123123' -d sqladv -q "create table t4(id int);" -v 1
2017-07-16 00:43:55 4032 [Note] 第1步: 对SQL解析优化之后得到的SQL:select  from dual where 1 having 1 
2017-07-16 00:43:55 4032 [Note] 第2步:表t4 的SQL太逆天,没有优化建议 
2017-07-16 00:43:55 4032 [Note] 第3步: SQLAdvisor结束!
3、配置文件传参调用
 
$> cat sql.cnf
[sqladvisor]
username=xx
password=xx
host=xx
port=xx
dbname=xx
sqls=sql1;sql2;sql3....
 
$ ./sqladvisor -f sql.cnf  -v 1

总结

DDL语句:相比较来说去哪网的Inception在这方面更专业,可以直接执行,如果审核通过的话。
select,DML语句:SQLadvisor更加专业,大量的索引审核,对成本进行比较。
按需使用,也可两者搭配。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
advisor2002仿真软件 ADVISOR(Advanced VehIcle SimulatOR,高级车辆仿真器)是由美国可再生能源实验室NREL(National RenewableEnergy Laboratory)在MATLAB和SIMULINK软件环境下开发的高级车辆仿真软件。   该软件从1994年11月份开始开发和使用,最初是用来帮助美国能源部DOE(DepartmentofEnergy)开发某混合动力汽车的动力系统,随后功能逐渐扩展,目前最新的正式版本ADVISOR2002可以对传统汽车、纯电动汽车和混合动力汽车的各种性能作快速分析,是世界上能在网站上免费下载和用户数量最多的汽车仿真软件。由于该软件通过大量的实践被证实具有较好的实用性,现在世界上许多生产企业、研究机构和高校都在使用该软件做汽车仿真方面的研究。 ADVISOR是MATLAB和SIMULINK软件环境下的一系列模型、数据和脚本文件,它在给定的道路循环条件下利用车辆各部分参数,能快速地分析传统汽车、纯电动汽车和混合动力汽车的燃油经济性、动力性以及排放性等各种性能。此外,该软件的开放性也允许对用户自定义的汽车模型和仿真策略做仿真分析。它主要有以下特点:   (1)仿真模型采用模块化的思想设计。ADVISOR软件分模块建立了发动机、离合器、变速器、主减速器、车轮和车轴等部件的仿真模型,各个模块都有标准的数据输入/输出端口,便于模块间进行数据传递,而且各总成模块都很容易扩充和修改,各模块也可以随意地组合使用,用户可以在现有模型的基础上根据需要对一些模块进行修改,然后重新组装需要的汽车模型,这样会大大节省建模时间,提高建模效率。   (2)仿真模型和源代码全部开放。ADVISOR2002的仿真模型和源代码在全球范围内完全公开,可以在网站上免费下载。用户可以方便地研究ADVISOR的仿真模型及其工作原理,在此基础上根据需要修改或重建部分仿真模型、调整或重新设计控制策略,使之更接近于实际情形,得出的仿真结果也会更合理。   (3)采用了独特的混合仿真方法。现在的汽车仿真方法主要有前向仿真和后向仿真两种,仿真软件也多采用其中的一种方法,使两种方法优劣不能互补,而ADVISOR采用了以后向仿真为主、前向仿真为辅的混合仿真方法,这样便较好地集成了两种方法的优点,既使仿真计算量较小,运算速度较快,同时又保证了仿真结果的精度。   (4)在MATLAB和SIMULINK软件环境下开发研制。MATLAB是世界上顶尖的可视化科学计算与数学应用软件,其语法结构简单、数值计算高效、图形功能完备,集成了诸多专业仿真工具包,而且它还提供了方便的应用程序接口(API),用户可以在MATLAB环境下直接调用C、Fortran等语言编写的程序。MATLAB内置的计算程序、专业的仿真工具以及与其他应用程序的接口,会减少汽车模型的搭建和仿真计算过程中工作量,同时也方便了熟悉不同编程语言的用户之间的合作。   (5)能与其他多种软件进行联合仿真(Co-simulation)。汽车是一个复杂的系统,其仿真更是涉及机械、电子、控制等多个领域,工作量很大,ADVISOR软件开发过程中也难以涉及所有领域,这样就限制了它一些功能的实现。但是ADVISOR设计了开放的软件接口,能与Saber、Simplorer、VisuaDOC、Sinda/Fluint等软件进行联合仿真,为用户改进和拓展其功能提供了方便。   虽然ADVISOR软件也有一些缺陷,例如,它的部件模型都是准静态的(quasi-static),不能预测小于十分之一秒左右时间范围内的一些现象;机械振动、电磁振荡等许多动态特性也不能通过ADVISOR软件进行仿真,但它的优越性仍然吸引了国内外的众多用户。 使用说明: 1.确保已安装matlaB6.1以上版本; 2.运行文件夹中的SetAdvisorPath.m文件; 3.运行advisor.m文件,打开advisor; 4.以后要运行,只需在matlaB命令窗口中输入advisor命令即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值