一、简介

在数据库运维过程中,优化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

###########采用rpm包手动安装##########

下载 tar 包
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

或者

https://www.percona.com/downloads/Percona-Server-5.6/Percona-Server-5.6.48-88.0/binary/redhat/7/x86_64/Percona-Server-5.6.48-88.0-r66735bc-el7-x86_64-bundle.tar

解压
tar -zxvf 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

我使用这个方案:
解压的时候报错了:
tar -zxvf Percona-Server-5.6.25-73.1-r07b797f-el6-x86_64-bundle.tar

gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now

然后换成:tar -xvf Percona-Server-5.6.25-73.1-r07b797f-el6-x86_64-bundle.tar(去掉z参数)

之后执行安装:
warning: Percona-Server-shared-56-5.6.25-rel73.1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY

##################################

需要配置软链接:

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。

安装sqladvisor-web

下载依赖:

yum install python-devel mysql-community-devel -y
  • 1

下载源码:

git clone https://github.com/zyw/sqladvisor-web.git
  • 1

安装依赖:

cd sqladvisor-web
pip3 install django_admin_bootstrapped

pip install -r requirements.txt

修改数据库配置

vim config.py
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or 'mysql://root:root@localhost/sqladvisor'

其中把第二个root修改成你安装Mysql时设置的密码
初始化数据库:

python manage.py db init
python manage.py db migrate
python manage.py db upgrade

启动系统:
解压sqlparser.tar.gz到/usr/local

python manage.py runserver --host 0.0.0.0 &

默认监听5000端口,此时安装完成

SQL优化工具SQLAdvisor使用相关推荐

  1. 美团点评开源 SQL 优化工具 SQLAdvisor 测试报告

    0x00 目录 0x00 目录 0x01 SQLAdvisor 介绍 0x02 SQLAdvisor 原理 0x03 SQLAdvisor 测试 3.1 SQLAdvisor 安装 3.2 导入测试数 ...

  2. 美团点评SQL优化工具SQLAdvisor开源

    介绍 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提升程序性能,还能够降低线上故障的概率. 目前常用的 SQL 优化方式包括但不限于:业务层优化.SQL逻 ...

  3. 【MySQL】MySQL数据库SQL优化工具 SQL Tuning Expert for MySQL(收费)

    1.概述 SQL Tuning Expert for MySQL 是 Tosska 公司推出的针对MySQL的SQL优化工具. 该工具不仅让DBA或者SQL开发人员,轻松阅读和理解执行计划,而且能产生 ...

  4. SQL优化工具分享-SQL Tuning Expert Pro for Oracle Trial

    做开发离不开对于数据库的接触,也离不开对SQL的接触,一个优质的SQL,可以让系统性能提升到质的飞跃,一个糟糕的SQL,可以让系统奔溃.所以对于我们开发人员来说,很需要一个SQL性能优化工具,在这种情 ...

  5. 人工智能自动sql优化工具--SQLTuning for SQL Server

    SQL语句是对数据库进行操作的惟一途径,对数据库系统的性能起着决定性的作用.对于同一条件下的SQL语句写法有很多,其中一些写法往往对性能又有很大影响.但是每个人掌握SQL语言的水平不同,如何才能保证写 ...

  6. SQL 优化工具 Explain

    ## SQL优化工具Explain MySQL是关系型数据库中的一种,**查询功能强,数据一致性高,数据安全性高,支持二级索引**.但性能方面稍逊与非关系型数据库,特别是百万级别以上的数据,很容易出现 ...

  7. web项目接到请求之后执行sql特别慢_小米开源!SQL优化工具,人工智能帮你 Rewrite...

    本文出自头条号老王谈运维,转载请说明出处. 作为一名优秀的DBA或系统管理员,工作总是充满各种"艰辛"! 你在工作中是否遇到过这样的情况:有一个慢SQL需要优化,但是通过分析执行计 ...

  8. mysql的sql优化工具下载_MySQL SQL查询优化工具EverSQL

    概述 一般来说,SQL查询优化器分析给定查询的许多选项,预估每个选项的成本,最后选择成本最低的选项.如果查询优化器选择了错误的计划,则性能差异可能从几毫秒到几分钟.幸运的是,现在有许多第三方SQL查询 ...

  9. 智能SQL优化工具--SQL Optimizer for SQL Server(帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 )...

    SQL Optimizer for SQL Server 帮助提升数据库应用程序性能,最大程度地自动优化你的SQL语句 SQL Optimizer for SQL Server 让 SQL Serve ...

  10. [转]mysql的sql优化工具

    原标题:DBA的五款最佳SQL查询优化工具,收藏了 一般来说,SQL查询优化器分析给定查询的许多选项,预估每个选项的成本,最后选择成本最低的选项.如果查询优化器选择了错误的计划,则性能差异可能从几毫秒 ...

最新文章

  1. qt 提高图片加载速度
  2. java js 截取字符串,js截取字符串的三种方法
  3. 查看mysql本地路径
  4. CSS 盒子的边距塌陷
  5. 您的API是什么情况?
  6. c语言指针变量的定义数组的长度,【C语言更新】指向数组的指针
  7. Maven 项目中配置私服
  8. FreeSwitch通过远程接口验证用户登录
  9. Bailian2700 字符替换【字符串】
  10. 《抓住“三伏天”习武健身的黄金季节》--胡俭雷
  11. openid4java 使用记录[转载]
  12. matlab安装及破解
  13. SentencePiece,subword-nmt,bpe算法
  14. android 键盘语音输入,讯飞输入法Android V7.0.4265 长按空格键开启语音输入
  15. 编辑视频贴纸软件_微剪辑 - 视频编辑神器/专业剪辑软件 贴纸/字幕/音乐
  16. 贪婪洞窟2服务器维护,12月24日贪婪洞窟2停服维护公告_贪婪洞窟2更新了什么_3DM手游...
  17. Deepin系统navicat15安装
  18. freescale S12X微控制器 模拟EEPROM 快速上手指南
  19. 波数与波长 matlab,波长与波数的关系为.PPT
  20. 数据集大全:25个深度学习的开放数据集

热门文章

  1. 视频教程-思科设备管理(CCNA魔鬼训练营系列)-思科认证
  2. 信号检测与估计c语言,清华大学出版社-图书详情-《信号检测与估计(第2版)》...
  3. C语言2级题pdf百度云,C语言二级考试试题.pdf
  4. 【数学建模】关联与因果问题
  5. 安装好数据库 提示计算机无法启动,DBC数据库异常无法启动!!!HERODB配置错误怎么解决呢?...
  6. 韩顺平JAVA学习笔记(入门自用)
  7. 在CSDN开通博客专栏后如何发布文章及改进建议(图文)
  8. 白话空间统计三十:地统计学(1)起源
  9. 水电远程预付费管理系统
  10. x5内核html5,X5内核+HTML5应用 Q立方浏览器预览版