SQL优化工具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索引优化建议
GitHup地址:https://github.com/Meituan-Dianping/SQLAdvisor
二、SQLAdvisor安装
2.1 拉取最新代码
1
|
$ git clone https://github.com/Meituan-Dianping/SQLAdvisor.git
|
2.2 安装依赖项
1
|
$ yum install cmake libaio-devel libffi-devel glib2 glib2-devel
|
跟据glib安装的路径,修改SQLAdvisor/sqladvisor/CMakeLists.txt中的两处include_directories针对glib设置的path。glib yum安装默认不需要修改路径。
另外,编译sqladvisor时依赖perconaserverclient_r, 因此需要安装Percona-Server-shared-56。
1
2
3
4
5
|
# 配置Percona56 yum源;
$ yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
# 安装Percona-Server-shared-56;
$ yum install Percona-Server-shared-56
|
如果yum安装不行,可以采用rpm包手动安装。参考:https://github.com/Meituan-Dianping/SQLAdvisor/issues/12
需要配置软链接:
1
2
3
4
5
|
$ rpm -ql Percona-Server-shared-56
/usr/lib64/libperconaserverclient.so.18
/usr/lib64/libperconaserverclient.so.18.1.0
/usr/lib64/libperconaserverclient_r.so.18
/usr/lib64/libperconaserverclient_r.so.18.1.0
|
1
2
|
$ cd /usr/lib64/
$ ln -s libperconaserverclient_r.so.18 libperconaserverclient_r.so
|
2.3 编译依赖项sqlparser
1
2
3
|
$ cd /root/SQLAdvisor/
$ 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.4 安装SQLAdvisor源码
1
2
3
|
$ cd /root/SQLAdvisor/sqladvisor/
$ cmake -DCMAKE_BUILD_TYPE=debug ./
$ make
|
安装完成后,在本路径下生成一个sqladvisor可执行文件,这即是我们想要的。
可以把可执行文件sqladvisor复制到PATH路径中。
1
|
$ cp -frp /root/SQLAdvisor/sqladvisor/sqladvisor /usr/local/bin/
|
三、SQLAdvisor使用
2.1 帮助输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
$ 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 命令行传参调用
1
|
$ sqladvisor -h xx -P xx -u xx -p 'xx' -d xx -q "sql" -v 1
|
2.3 配置文件传参调用
1
2
3
4
5
6
7
8
|
$ cat sql.cnf
[sqladvisor]
username=xx
password=xx
host=xx
port=xx
dbname=xx
sqls=sql1;sql2;sql3....
|
1
|
$ sqladvisor -f sql.cnf -v 1
|
2.4 测试使用
1
2
3
4
5
6
7
8
|
$ cat sqladvisor.cnf
[sqladvisor]
username=root
password=zabbix
host=localhost
port=3306
dbname=blog
sqls=SELECT * FROM wp_posts where post_date>"2015-07-16 18:44:27";
|
1
2
3
4
5
6
7
8
9
|
$ sqladvisor -f sqladvisor.cnf -v 1
2017-04-13 17:39:59 23848 [Note] 第1步: 对SQL解析优化之后得到的SQL:select `*` AS `*` from `blog`.`wp_posts` where (`post_date` > '2015-07-16 18:44:27')
2017-04-13 17:39:59 23848 [Note] 第2步:开始解析where中的条件:(`post_date` > '2015-07-16 18:44:27')
2017-04-13 17:39:59 23848 [Note] show index from wp_posts
2017-04-13 17:39:59 23848 [Note] show table status like 'wp_posts'
2017-04-13 17:39:59 23848 [Note] select count(*) from ( select `post_date` from `wp_posts` FORCE INDEX( PRIMARY ) order by ID DESC limit 3763) `wp_posts` where (`post_date` > '2015-07-16 18:44:27')
2017-04-13 17:39:59 23848 [Note] 第3步:表wp_posts的行数:7527,limit行数:3763,得到where条件中(`post_date` > '2015-07-16 18:44:27')的选择度:1
2017-04-13 17:39:59 23848 [Note] 第4步:表wp_posts 的SQL太逆天,没有优化建议
2017-04-13 17:39:59 23848 [Note] 第5步: SQLAdvisor结束!
|
四、SQLAdvisor工作原理
详情看:SQLAdvisor架构和实践
五、SQLAdvisor Web
美团开源出来的SQLAdvisor SQL优化建议工具只有命令行,所以有网友就针对这个开发出了Web版本,告别命令行。
GitHub地址:https://github.com/zyw/sqladvisor-web
- 项目中使用的美团SQL分析工具是在CentOS上编译的,所以建议部署到CentOS上。
- 该项目是使用Python的Flask框架开发的。
- 使用CentOS自带的Python版本,版本号是2.7.5。
原文地址:http://www.ywnds.com/?p=8996&viewuser=49
转载于:https://www.cnblogs.com/jpfss/p/8135408.html
SQL优化工具SQLAdvisor使用(转)相关推荐
- 美团点评开源 SQL 优化工具 SQLAdvisor 测试报告
0x00 目录 0x00 目录 0x01 SQLAdvisor 介绍 0x02 SQLAdvisor 原理 0x03 SQLAdvisor 测试 3.1 SQLAdvisor 安装 3.2 导入测试数 ...
- 美团点评SQL优化工具SQLAdvisor开源
介绍 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的 SQL 优化方式包括但不限于:业务层优化.SQL逻 ...
- 【MySQL】MySQL数据库SQL优化工具 SQL Tuning Expert for MySQL(收费)
1.概述 SQL Tuning Expert for MySQL 是 Tosska 公司推出的针对MySQL的SQL优化工具. 该工具不仅让DBA或者SQL开发人员,轻松阅读和理解执行计划,而且能产生 ...
- SQL优化工具分享-SQL Tuning Expert Pro for Oracle Trial
做开发离不开对于数据库的接触,也离不开对SQL的接触,一个优质的SQL,可以让系统性能提升到质的飞跃,一个糟糕的SQL,可以让系统奔溃.所以对于我们开发人员来说,很需要一个SQL性能优化工具,在这种情 ...
- 人工智能自动sql优化工具--SQLTuning for SQL Server
SQL语句是对数据库进行操作的惟一途径,对数据库系统的性能起着决定性的作用.对于同一条件下的SQL语句写法有很多,其中一些写法往往对性能又有很大影响.但是每个人掌握SQL语言的水平不同,如何才能保证写 ...
- SQL 优化工具 Explain
## SQL优化工具Explain MySQL是关系型数据库中的一种,**查询功能强,数据一致性高,数据安全性高,支持二级索引**.但性能方面稍逊与非关系型数据库,特别是百万级别以上的数据,很容易出现 ...
- web项目接到请求之后执行sql特别慢_小米开源!SQL优化工具,人工智能帮你 Rewrite...
本文出自头条号老王谈运维,转载请说明出处. 作为一名优秀的DBA或系统管理员,工作总是充满各种"艰辛"! 你在工作中是否遇到过这样的情况:有一个慢SQL需要优化,但是通过分析执行计 ...
- mysql的sql优化工具下载_MySQL SQL查询优化工具EverSQL
概述 一般来说,SQL查询优化器分析给定查询的许多选项,预估每个选项的成本,最后选择成本最低的选项.如果查询优化器选择了错误的计划,则性能差异可能从几毫秒到几分钟.幸运的是,现在有许多第三方SQL查询 ...
- 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )...
SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...
- [转]mysql的sql优化工具
原标题:DBA的五款最佳SQL查询优化工具,收藏了 一般来说,SQL查询优化器分析给定查询的许多选项,预估每个选项的成本,最后选择成本最低的选项.如果查询优化器选择了错误的计划,则性能差异可能从几毫秒 ...
最新文章
- 微信小程序获取当前城市定位
- 通知 | 2017年清华-青岛数据科学研究院“RONG”奖学金即将开放申请
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem D. Grumpy Cat 交互题
- 虚拟机的ubunt系统在登录界面循环往复,登录不进去问题
- java8-接口新特性
- 四十一、Python统计模块statistics
- httpsrequest java_java如何通过https返回数据
- JVM——三个ClassLoader详解
- nmap入门之主机发现
- HSmartWindowControl 之 显示图像
- 微软silverlight视频教程
- LINUX Cacti 安装SOP FOR CentOS6.5
- Echarts图表位置调整
- 主流的推荐系统算法总结
- word封面和目录不要设置页码
- reflector 插件_Reflector Plus Plus-插件,IronPython和其他Peli Goodness
- CIFAR10图像分类ResNet模型实战(pytorch)
- Android中一个app启动另一个app的指定activity
- Qt实战(二)——方块游戏
- LBP算法的研究及其实现
热门文章
- Unity 插件之 Highlighting 高亮插件
- 单片机控制步进电机程序c语言正反转停止,51单片机控制步进电机的启动、停止、正转、反转...
- linux php连接mysql权限不够_PHP LINUX APACHE MYSQL权限挣扎
- 御剑后台扫描工具下载、安装、使用教程
- 熊猫烧香病毒作者再被捕 开网络赌场敛财
- SQL Prompt 激活下载破解码注册码序列号,内有方法
- OS X系统U盘安装的问题
- linux命令 视频教程,常用的linux命令视频教程
- java下载文件excel格式错乱,excel表格数据错乱如何修复-excel表格里的文件突然格式全部乱了,怎么恢复?...
- 尚硅谷zookeeper入门笔记