小米soar

SOAR 简介linux

SOAR,即 SQL Optimizer And Rewriter,是一款 SQL 智能优化与改写工具,由小米运维 DBA 团队出品git

SOAR 体系架构github

SOAR主要由语法解析器,集成环境,优化建议,重写逻辑,工具集五大模块组成。算法

语法解析和语法检查数据库

一条SQL从文件,标准输入或命令行参数等形式传递给SOAR后首先进入语法解析器,选用了vitess的语法解析库做为SOAR的语法解析库,但随时需求的不断增长咱们发现有些复杂需求使用vitess的语法解析实现起来比较逻辑比较复杂。因而参考业办其余数据库产品,因而引入了TiDB的语法解析器作为补充。后来发现这两个解析库还存在必定的盲区,因而又引入了MySQL执行返回结果做为多多版本SQL方言的补充。你们也能够看到在语法解析器这里,SOAR的实现方案是松散的、可插拔的。SOAR并不直接维护庞大的语法解析库,它把各类优秀的语法解析库集成在一块儿,各取所长。安全

集成环境markdown

集成环境区分线上环境和测试环境两种,分别用于解决不一样场景下用户的SQL优化需求。一种常见的状况是已有表结构须要优化查询SQL的场景,能够从线上环境导出表结构和足够的采样数据到测试环境,在测试环境上就能够放心的执行各类高危操做而不用担忧数据被损坏。另外一种常见的状况是建一套全新的数据库,须要验证提供的数据字典中是否存在优化的可能。对于这种状况,颇有可能你不须要知道线上环境在哪儿,彻底只是想先试试看,若是报错了立刻改对就是了。固然还有更多种组合的场景需求,将在集成环境一单分类说明。架构

优化建议运维

目前SOAR能够提供的优化建议有基于启发式规则(一般也称之为经验)的优化建议,基于索引优化算法给出的索引优化建议,以及基于EXPLAIN信息给出的解读。工具

重写逻辑

上面提到的优化建议是早期实现的主要功能,早期的功能还只是停留在建议上,对于一些初级用户看到建议也不必定会改写。为了进一步简化SQL优化的成本,SOAR又进一步挖掘了自动SQL重写的功能。如今提供几十种常见场景下的SQL等价转写,不过相比SQL优化建议还有很大的改进空间。这部分的功能和逻辑将在重写逻辑一章中详细说明。

工具集

除了SQL优化和改写之外,为了方便用户使用以及美化输出展示形式,SOAR还提供了一些辅助的小工具,好比markdown转HTML工具,SQL格式化输出工具等等。你能够在经常使用命令中找到这些小工具的使用方法。

SOAR 功能特色

SOAR的功能特色以下:

● 跨平台支持(支持Linux, Mac环境,Windows环境理论上也支持,不过未全面测试)

● 支持基于启发式算法的语句优化

● 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)

● 支持EXPLAIN信息丰富解读

● 支持SQL指纹、压缩和美化

● 支持同一张表多条ALTER请求合并

● 支持自定义规则的SQL改写

此外,小米的SOAR与业内其余优秀产品对比,也有着很是大的优点:

 

二进制安装

wget https://github.com/XiaoMi/soar/releases/download/0.9.0/soar.linux-amd64 -O soar
chmod a+x soar

快速上手

安装完成以后无需进行任何配置,只须要执行下面这条命令,就能够马上生成一份Markdown格式的SQL评审报告,根据报告中的建议对SQL进行修改。

# ./soar -query "select * from tb;"  或 # echo "select * from tb;" | ./soar 

使用配置

SOAR提供了丰富的配置参数,能够根据不一样的使用场景指定不一样的配置项来定制私有的评审建议。不过您也无须担忧这些配置会对使用带来困扰,大部分配置选项是为有特殊需求用户准备的,即便不作任何配置也可以体验到SOAR的基础的功能。

SOAR的配置文件为YAML格式,在通常状况下只须要配置online-dsn, test-dsn, log-output等少数几个参数,您就能够体验到SOAR提供的绝大部分的功能了。

配置环境

因为不少的功能须要数据库的元数据来进行辅助判断,因此当不指定数据库环境的时候,不少功能将会采起降级的策略,因此咱们强烈建议您在配置文件中指定相关数据库环境。为了保护线上数据库的安全,咱们将数据库环境区分为线上和测试两种环境,可是这并不意味着您必定须要两个数据库环境,但至少建议您指定一个测试环境。

这里须要注意的是,由于咱们会在测试环境中作一些风险相对较高的操做,为了防止用户因为配置疏忽致使线上数据受损,咱们添加了allow-online-as-test参数来保证您确实是但愿将线上环境作为测试环境来使用。因此当您指定的两个集成环境相同时,请指定allow-online-as-test为true,不然SOAR将不会进行评审。 

默认文件会按照/etc/soar.yaml, ./etc/soar.yaml, ./soar.yaml顺序加载,找到第一个后再也不继续加载后面的配置文件。如需指定其余配置文件能够经过-config参数指定。 即便不建立配置文件SOAR仍然会给出基本的启发式建议。

[root@mydb1 ~]# cat /etc/soar.yaml
# 线上环境配置
online-dsn:
  addr: 127.0.0.1:3306
  schema: mytest
  user: dba_user
  password: msds007
  disable: false
# 测试环境配置
test-dsn:
  addr: 127.0.0.1:3306
  schema: test
  user: dba_user
  password: msds007
  disable: false
# 是否容许测试环境与线上环境配置相同
allow-online-as-test: true 

 

https://mp.weixin.qq.com/s/7sj2HnOQsNP_Zf_07C1FFQ?utm_medium=hao.caibaojian.com&utm_source=hao.caibaojian.com 

https://www.bookstack.cn/books/SOAR-zh 

相关文章
相关标签/搜索