Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【MySQL】SQLAdvisor的简单安装使用

【MySQL】SQLAdvisor的简单安装使用

作者头像
用户5522200
发布于 2020-06-11 08:46:12
发布于 2020-06-11 08:46:12
2K00
代码可运行
举报
文章被收录于专栏:lindalinda
运行总次数:0
代码可运行

一、SQLAdvisor 介绍

SQLAdvisor 是由美团点评公司北京DBA团队开发维护的 SQL 优化工具:输入SQL,输出索引优化建议。 它基于 MySQL 原生词法解析,再结合 SQL 中的 where 条件以及字段选择度、聚合条件、多表 Join 关系等最终输出最优的索引优化建议。目前 SQLAdvisor 在公司内部大量使用,较为成熟、稳定。 项目 GitHub 地址:https://github.com/Meituan-Di... SQLAdvisor架构流程图 SQLAdvisor 包含了如下的处理方式:Join 处理、where 处理、计算区分度、添加备选索引、Group 与 Order 处理、驱动表选择、添加被驱动表备选索引、输出建议,具体的流程图可以参考https://tech.meituan.com/2017...

二、SQLAdvisor 的优点

基于 MySQL 原生词法解析,充分保证词法解析的性能、准确定以及稳定性; 支持常见的 SQL(Insert/Delete/Update/Select); 支持多表 Join 并自动逻辑选定驱动表; 支持聚合条件 Order by 和 Group by; 过滤表中已存在的索引。

三、 SQLAdvisor安装

3.1 拉取最新代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#git clone https://github.com/Meituan-Dianping/SQLAdvisor.git

3.2 安装依赖项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yum install -y cmake libaio-devel libffi-devel glib2 glib2-devel bison
yum install -y Percona-Server-server-56 Percona-Server-client-56

//设置软链
cd /usr/lib64/
ls -l libperconaserverclient_r.so.18
ln -s libperconaserverclient_r.so.18 libperconaserverclient_r.so

注意

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
跟据glib安装的路径,修改SQLAdvisor/sqladvisor/CMakeLists.txt中的两处include_directories针对glib设置的path。glib yum 安装默认不需要修改路径
编译sqladvisor时依赖perconaserverclient_r, 因此需要安装Percona-Server-shared-56。有可能需要配置软链接,例如:
1. cd /usr/lib64/ 
2. ln -s libperconaserverclient_r.so.18 libperconaserverclient_r.so
有可能需要配置percona56 yum源:
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum -y install Percona-Server-shared-56

3.3 编译依赖项sqlparser

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. cmake -DBUILD_CONFIG=mysql_release -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=/usr/local/sqlparser ./
2. make && make install

注意

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DCMAKE_INSTALL_PREFIX为sqlparser库文件和头文件的安装目录,其中lib目录包含库文件libsqlparser.so,include目录包含所需的所有头文件。
DCMAKE_INSTALL_PREFIX值尽量不要修改,后面安装依赖这个目录。

3.4 安装SQLAdvisor源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. cd SQLAdvisor/sqladvisor/
2. cmake -DCMAKE_BUILD_TYPE=debug ./
3. make
在本路径下生成一个sqladvisor可执行文件,这即是我们想要的。

四、 SQLAdvisor使用

4.1 --help输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ./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

4.2 命令行传参调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ./sqladvisor -h xx  -P xx  -u xx -p 'xx' -d xx -q "sql" -v 1
注意:命令行传参时,参数名与值需要用空格隔开

4.3 配置文件传参调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$> 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

4.4 例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@OPS-9-78 sqladvisor]# sqladvisor -u root -p 'xxxxxx' -h 192.168.9.78 -P 3400 -d test_tur -q "select * from base_test where district_code=10000" -v 1 
2020-04-22 14:16:58 63400 [Note]1:SQL解析优化之后得到的SQL:select `*` AS `*` from `test_tur`.`base_test` where (`district_code` = 10000) 

2020-04-22 14:16:58 63400 [Note]2步:开始解析where中的条件:(`district_code` = 10000) 

2020-04-22 14:16:58 63400 [Note] show index from base_test 

2020-04-22 14:16:58 63400 [Note] show table status like 'base_test' 

2020-04-22 14:16:58 63400 [Note] select count(*) from ( select `district_code` from `base_test` FORCE INDEX( PRIMARY ) order by id DESC limit 10000) `base_region` where (`district_code` = 10000)  

2020-04-22 14:16:59 63400 [Note]3步:表base_test的行数:47447,limit行数:10000,得到where条件中(`district_code` = 10000)的选择度:10000 

2020-04-22 14:16:59 63400 [Note]4步:开始验证 字段district_code是不是主键。表名:base_test 

2020-04-22 14:16:59 63400 [Note] show index from base_test where Key_name = 'PRIMARY' and Column_name ='district_code' and Seq_in_index = 1 

2020-04-22 14:16:59 63400 [Note]5步:字段district_code不是主键。表名:base_test 

2020-04-22 14:16:59 63400 [Note]6步:开始验证 字段district_code是不是主键。表名:base_test 

2020-04-22 14:16:59 63400 [Note] show index from base_test where Key_name = 'PRIMARY' and Column_name ='district_code' and Seq_in_index = 1 

2020-04-22 14:16:59 63400 [Note]7步:字段district_code不是主键。表名:base_test 

2020-04-22 14:16:59 63400 [Note]8步:开始验证表中是否已存在相关索引。表名:base_test, 字段名:district_code, 在索引中的位置:1 

2020-04-22 14:16:59 63400 [Note] show index from base_test where Column_name ='district_code' and Seq_in_index =1 

2020-04-22 14:16:59 63400 [Note]9步:开始输出表base_test索引优化建议: 

2020-04-22 14:16:59 63400 [Note] Create_Index_SQL:alter table base_test add index idx_district_code(district_code) 

2020-04-22 14:16:59 63400 [Note]10: SQLAdvisor结束! 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL之安装美团点评的SQLAdvisor
    注意:是在Centos7上安装SQLAdvisor,必须是在没有安装MySQL的Centos7上安装,因为如果事先安装了MySQL,那么安装SQLAdvisor时,MySQL的/etc/my.cnf会与SQLAdvisor的依赖发生冲突。
克虏伯
2019/04/15
1.1K0
SQL审核工具SQL Advisor简单体验
现在的很多大公司,都喜欢招丰富经验的人,从公司的角度来说,能把当前的事务性工作解决了,在这个基础上能够把你的理解和知识沉淀下来,那是极好的,说通俗一些,算是吸星大法了。
jeanron100
2018/07/26
1.3K0
SQL审核工具SQL Advisor简单体验
部署MySQL 5.7
注:在安装MySQL前需要卸载掉当前已有的mariadb,然后需要安装gcc环境 1、安装cmake
小手冰凉
2020/04/12
7670
在Linux下源码编译安装GreatSQL/MySQL
本次介绍如何利用Docker来将GreatSQL源码编译成二进制文件,以及制作二进制包、RPM包等。
老叶茶馆
2021/08/26
2.3K0
【知识】MySQL索引原理及慢查询优化
MySQL用来加快查询的技术很多,其中最重要的是索引。通常索引能够快速提高查询速度。如果不适用索引,MYSQL必须从第一条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。但也不全是这样。本文讨论索引是什么以及如何使用索引来改善性能,以及索引可能降低性能的情况。
辉哥
2021/06/10
1.1K0
【知识】MySQL索引原理及慢查询优化
Galera Cluster for MySQL 详解(二)——安装配置
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
用户1148526
2019/10/22
3.9K0
MySQL几种count比较
网上有很多关系型数据库各种count操作孰优孰劣的文章,如下是曾经写过的有关Oracle和PG中count的文章,
bisal
2022/09/21
2.2K0
技术译文 | MySQL 8.x DDL 和查询重写插件
本文来源:https://www.percona.com/blog/2020/08/07/mysql-8-x-ddl-rewriter-and-query-rewriter-plugins-implementation-and-use-cases/
爱可生开源社区
2020/08/17
4230
SQL自动化审核工具测试
最近在做一些SQL审核的事情,这里讲SQL审核的前期工作简单总结一下,做的一些测试的结果,希望对大家认识这两个自动化审核工具有所帮助。
AsiaYe
2019/11/06
3K0
SQL自动化审核工具测试
Mysql检测工具使用
一、mysqldumpslow工具使用 1.1、修改配置文件开启慢查询 mysql 开启慢查询 systemctl stop mysqld echo -e "# 开启慢查询\nslow_query_log = 1\nslow_query_log_file = /var/lib/mysql/slow-query.log\nlong_query_time = 1\nlog_queries_not_using_indexes = 1" >>/etc/my.cnf # 重启mysql systemctl rest
mikelLam
2022/10/31
1.3K0
[新坑][deepin][linux][Remmina]无法链接部分RDP服务Cannot open libmwv206dec.so, libmwv206dec.so: 无法打开共享对象文件: 没有那
[新坑][deepin][linux][Remmina]无法链接部分RDP服务Cannot open libmwv206dec.so, libmwv206dec.so: 无法打开共享对象文件: 没有那个文件或目录
landv
2020/11/13
1.7K0
[新坑][deepin][linux][Remmina]无法链接部分RDP服务Cannot open libmwv206dec.so, libmwv206dec.so: 无法打开共享对象文件: 没有那
percona-toolkit大表操作DDL使用 2.1.  数据库字符集修改2.2.  数据库建库、授权操作2.3.  数据库建表、插入数据4.1.  添加表字段【
1. 系统与安装数据库 1 [root@zhang ~]# cat /etc/redhat-release # 也可以使用其他版本 2 CentOS Linux release 7.4.1708 (Core) 3 [root@zhang ~]# yum install -y mariadb mariadb-server # CentOS7的mysql数据库为mariadb 4 ……………… 5 [root@zhang ~]# systemctl enable mariadb.service
踏歌行
2020/10/15
8160
新手001|CentOS7下源码安装MySQL5.7.6+
MySQL 安装方式分为: 源码安装,相应系统发行包安装(如 rpm, yum, apt-get 等)。生产中比较推荐使用二进制安装。 这里给大家推荐一篇源码安装,大家可以了解一下,这个可以用到学习源码之路。
wubx
2019/02/27
9310
mysql 中的备份恢复、分区分表、主从复制、读写分离
✨ mysql 的备份和恢复 创建备份管理员 创建备份管理员,并授予管理员相应的权限 备份所需权限:select,reload,lock tables,replication client,show view,event,process # 创建管理员 create user 'backup'@'localhost' identified by '123456'; # 给管理员授权 grant select,reload,lock tables,replication client,show view,
江户川码农
2022/08/16
3.4K2
mysql 中的备份恢复、分区分表、主从复制、读写分离
快速学习-Linux操作MySQL指令集合
1 ifconfig 2 vi /etc/sysconfig/network-scripts/ifcfg-eth0 3 vi 4 vi /etc/udev/rules.d/70-persistent-net.rules 5 reboot 6 ifconfig 7 vi /etc/sysconfig/network-scripts/ifcfg-eth0 8 reboot 9 ifconfig 10 serv
cwl_java
2020/02/13
6900
Linux使用wget命令下载网络资源
之前接触的Linux环境大多是内网,一般都是采用传统的FTP服务器统一存放常用资源,有人需要时从FTP直接下载,若公司FTP没有想要的资源,还需联系管理维护人员下载上传对应的介质。 而目前随着云ECS的普及,很多环境具备了直接连接外网的条件,我们可以使用wget命令直接从网络下载所需资源。 比如,可以用下面的命令直接下载redis-3.2.10.tar.gz这个介质:
Alfred Zhao
2020/04/23
2.2K0
杨校老师课堂之Java项目部署到云端服务器之安装MySQL、Jdk、Tomcat
部署项目到公网上去思路剖析 ---- · 公网服务器 · 数据库 · 下载、安装、配置、远程连接 · 使用本地的Navicat去远程连接 操作数据库 · JDK 安装Tomcat的前提 · tomcat ·目录结构 · webapps ·放入你的项目 ---- image.png 拥有一台服务器,安装centos系统 Centos7.x # 安装Centos的wget插件 yum install wget -y
杨校
2020/04/17
1.2K0
杨校老师课堂之Java项目部署到云端服务器之安装MySQL、Jdk、Tomcat
故障分析 | MySQL 5.7 使用临时表导致数据库 Crash
在 MySQL5.7.30 主从读写分离环境下,从库在某天出现了 MySQL crash.
爱可生开源社区
2022/05/13
5040
【Mysql】mysql命令常用语句[通俗易懂]
参考文档 https://www.cnblogs.com/dongling/p/5710643.html
全栈程序员站长
2022/10/04
7420
【Mysql】mysql命令常用语句[通俗易懂]
使用XtraBackup创建mysql slave2
安装mysql [root@slave-test src]# yum install Percona-Server-server-56 Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.pubyun.com * extras: mirrors.pubyun.com * updates: mirrors.pubyun.
franket
2022/05/04
4040
推荐阅读
相关推荐
MySQL之安装美团点评的SQLAdvisor
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验