前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xiaomi开源SQL优化建议工具 - soar

xiaomi开源SQL优化建议工具 - soar

作者头像
HHTjim 部落格
发布2022-09-26 10:50:33
5700
发布2022-09-26 10:50:33
举报
文章被收录于专栏:HHTjim'S 部落格

xiaomi开源SQL优化建议工具 - soar

作者:matrix 被围观: 5,061 次 发布时间:2018-10-29 分类:零零星星 | 一条评论 »

这是一个创建于 1403 天前的主题,其中的信息可能已经有所发展或是发生改变。

SOAR -- sql Optimizer And Rewriter 由小米运维 DBA 团队开发的sql 智能优化与改写工具20181021宣布开源。

github:https://github.com/[xiaomi](https://www.hhtjim.com/tag/xiaomi)/soar

安装说明:https://github.com/[xiaomi](https://www.hhtjim.com/tag/xiaomi)/soar/blob/master/doc/install.md

测试环境:ubuntu 16.04

安装GO

apt-get安装失败改用

源码下载:https://[GO](https://www.hhtjim.com/tag/go)lang.google.cn/dl/

配置环境变量

代码语言:javascript
复制
解压:
> sudo tar -C /usr/local -xzf go1.11.1.linux-amd64.tar.gz

全局用户的环境变量:
> sudo vi /etc/profile

末尾添加:
export PATH=$PATH:/usr/local/go/bin

go版本查看:

> go version

source更新环境变量:

source /etc/profile

还需要配置GOPATH环境变量:表示go的工作目录 USER_NAME 为用户名
export GOPATH="/home/USER_NAME/go"

安装soar

代码语言:javascript
复制
> go get -d github.com/XiaoMi/soar
> cd ${GOPATH}/src/github.com/XiaoMi/soar && make

若安装顺利,最终会显示success。否则 build error

我前几次安装都失败

代码语言:javascript
复制
go build github.com/pingcap/tidb/parser: /usr/local/go/pkg/tool/linux_amd64/compile: signal: killed 
Makefile:69: recipe for target 'build' failed

之后google找到帖子 有人说是vps内存太低导致的,遂重启了下Ubuntu 重新make。bingo~

安装成功之后会发现~/go/src/github.com/XiaoMi/soar多出一个 soar文件。

执行测试:

代码语言:javascript
复制
> cd ~/go/src/github.com/XiaoMi/soar
> echo 'select * from film' | ./soar

使用soar

常用命令:https://github.com/XiaoMi/soar/blob/master/doc/cheatsheet.md

打印所有的启发式规则1
代码语言:javascript
复制
$ soar -list-heuristic-rules
打印支持的报告格式
代码语言:javascript
复制
$ soar -list-report-types
以指定格式输出报告
代码语言:javascript
复制
$ soar -report-type json
语法检查工具
代码语言:javascript
复制
$ echo "select * from tb" | soar -only-syntax-check
$ echo $?
0

$ echo "select * fromtb" | soar -only-syntax-check
At SQL 0 : syntax error at position 16 near 'fromtb'
$ echo $?
1
慢日志进行分析示例
代码语言:javascript
复制
$ pt-query-digest slow.log > slow.log.digest
# parse pt-query-digest's output which example script
$ python2.7 doc/example/digest_pt.py slow.log.digest > slow.md
SQL指纹
代码语言:javascript
复制
$ echo "select * from film where col='abc'" | soar -report-type=fingerprint

输出

代码语言:javascript
复制
select * from film where col=?
将UPDATE/DELETE/INSERT语法转为SELECT
代码语言:javascript
复制
$ echo "update film set title = 'abc'" | soar -rewrite-rules dml2select,delimiter  -report-type rewrite

输出

代码语言:javascript
复制
select * from film;
合并多条ALTER语句
代码语言:javascript
复制
$ echo "alter table tb add column a int; alter table tb add column b int;" | soar -report-type rewrite -rewrite-rules mergealter

输出

代码语言:javascript
复制
ALTER TABLE `tb` add column a int, add column b int ;
SQL美化
代码语言:javascript
复制
$ echo "select * from tbl where col = 'val'" | ./soar -report-type=pretty

输出

代码语言:javascript
复制
SELECT
  *
FROM
  tbl
WHERE
  col  = 'val';
EXPLAIN信息分析报告
代码语言:javascript
复制
$ soar -report-type explain-digest << EOF
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | film  | ALL  | NULL          | NULL | NULL    | NULL | 1131 |       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
EOF
代码语言:javascript
复制
##  Explain信息

| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1  | SIMPLE | *film* | NULL | ALL | NULL | NULL | NULL | NULL | 0 | 0.00% | &#x2620;&#xfe0f; **O(n)** |  |


### Explain信息解读

#### SelectType信息解读

* **SIMPLE**: 简单SELECT(不使用UNION或子查询等).

#### Type信息解读

* &#x2620;&#xfe0f; **ALL**: 最坏的情况, 从头到尾全表扫描.
markdown转HTML

通过指定-report-css, -report-javascript, -markdown-extensions, -markdown-html-flags这些参数,你还可以控制HTML的显示格式。

代码语言:javascript
复制
$ cat test.md | soar -report-type md2html > test.html

PEACE~

参考:

https://github.com/beego/wetalk/issues/32

https://www.oschina.net/news/101034/xiaomi-opensource-soar

https://juejin.im/entry/5bbf21fde51d450e61605d99


  1. 启发式规则
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • xiaomi开源SQL优化建议工具 - soar
    • 安装GO
      • 安装soar
        • 使用soar
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档