「小米技术」Soar一键优化工具--SQL优化和改写的自动化工具

老王Plus 2020-01-14 16:48:01 ⋅ 873 阅读

概述

SOAR(SQL Optimizer And Rewriter)是一个对SQL进行优化和改写的自动化工具。由小米人工智能与云平台的数据库团队开发与维护。

今天主要介绍下怎么用SOAR来做一些sql优化的工作。。


一、功能特点

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

  • 目前只支持 MySQL 语法族协议的SQL优化

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

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

  • 支持EXPLAIN信息丰富解读

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

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

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



二、体系架构

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


1、语法解析和语法检查

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

2、集成环境

集成环境区分线上环境和测试环境两种,分别用于解决不同场景下用户的SQL优化需求。一种常见的情况是已有表结构需要优化查询SQL的场景,可以从线上环境导出表结构和足够的采样数据到测试环境,在测试环境上就可以放心的执行各种高危操作而不用担心数据被损坏。另一种常见的情况是建一套全新的数据库,需要验证提供的数据字典中是否存在优化的可能。对于这种情况,很有可能你不需要知道线上环境在哪儿,完全只是想先试试看,如果报错了马上改对就是了。

3、优化建议

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

4、重写逻辑

为了进一步简化SQL优化的成本,SOAR又进一步挖掘了自动SQL重写的功能。提供几十种常见场景下的SQL等价转写,不过相比SQL优化建议还有很大的改进空间。

5、工具集

除了SQL优化和改写以外,为了方便用户使用以及美化输出展现形式,SOAR还提供了一些辅助的小工具,比如markdown转HTML工具,SQL格式化输出工具等等。



三、产品对比




四、二进制安装部署篇

1、二进制部署

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


2、用法


2.1、基本用法

echo "select title from sakila.film" | ./soar -log-output=soar.log

2.2、指定输入源

# 从文件读取SQL./soar -query file.sql

2.3、 从管道读取SQL

cat file.sql | ./soar

2.4、指定配置文件

vi soar.yaml# yaml format config fileonline-dsn:    addr: 127.0.0.1:3306    schema: sakila    user: root    password: "1t'sB1g3rt"    disable: falsetest-dsn:    addr: 127.0.0.1:3306    schema: sakila    user: root    password: "1t'sB1g3rt"    disable: falseecho "select title from sakila.film" | ./soar -test-dsn="root:1t'sB1g3rt@127.0.0.1:3306/sakila" -allow-online-as-test -log-output=soar.log


3、实例

--sql[root@ZL-FSL-TMS-MYSQL1 soar]# cat query.sql select * from fsl_order_base_line where order_base in (select id from (SELECT    t2.shipper,t2.dest_dock_code,t1.order_no2,t1.supplier,COUNT(0) cnt,max(t1.id) id  FROM  fsl_order_base t1 JOIN fsl_order_base_line t2 ON t1.id = t2.order_base  WHERE  t1.project_code = 'DD'  and order_status=0  GROUP BY t2.shipper , t2.dest_dock_code , t1.order_no2 , t1.supplier  HAVING COUNT(0) >= 2) a)--配置[root@ZL-FSL-TMS-MYSQL1 soar]# cat soar.yaml # yaml format config fileonline-dsn:    addr: 127.0.0.1:3306    schema: xx    user: root    password: "password"    disable: false--优化./soar -query query.sql  -online-dsn="root:password@127.0.0.1:3306/xxx"  -allow-online-as-test  -log-output=soar.log







到这里关于soar的基本操作就介绍完了,那么有没有一种基于soar开发的web图形化工具呢?篇幅有限,后面再做一下介绍,感兴趣的朋友可以关注下~



全部评论: 0

    我有话说:

    最全Mac工具

      MacTool Mac 开源免费工具汇总, 只罗列开源好用。更全列表请参考awesome-mac 必备 Homebrew - 体验通过命令行安装 Mac 软件工具(大部分是

    IntelliJ IDEA 开启很慢,运行不流畅,大项目卡顿?招配置解决!

    来源:Java面试题精选 、前言 IDEA默认启动配置主要考虑低配置用户,参数不高(默认最低128m,最高512m),导致启动慢,然后运行也不流畅,这里我们需要优化下启动运行配置;但是在工作

    工具集001

      1.  Google项目管理工具 Tables   2. 终端 taskwarrior --- TODO List Taskwarrior is

    工具集002

      文件对比 https://www.diffchecker.com/excel-diff 快速找出类似文件不同之处。  

    WeCube 2.7.0 版本发布,站式架构运维管理工具

    WeCube简介 微众银行在分布式架构实践过程中,发现将银行核心系统构建于分布式架构之上,会遇到一些与传统单体应用不同痛点(例如,服务器增多,部署难度大;调用链长,全链路跟踪困难; 系统复杂

    挖那些让公司网站瘫痪SQL“终结者”

    条慢查询会造成什么后果?之前我一直觉得不就是返回数据会慢一些么,用户体验变差? 其实远远不止,我经历过几次线上事故,有次就是由SQL 慢查询导致。 那次是SQL 查询耗时达到 2

    DrissionPage WEB 自动化测试集成工具

    软件简介 DrissionPage,即 driver session 合体,是一个基于 python Web 自动化操作集成工具。 requests 爬虫面对要登录网站时,要

    gulp.js 基于流自动化构建工具,对小程序代码进行打包

    gulpjs是一个前端构建工具,与gruntjs相比,gulpjs无需大堆繁杂配置参数,API也非常简单,学习起来很容易,而且gulpjs使用是nodejs中stream来读取...

    代码整洁之道:Lombok 使用

    Lombok项目是自动接通你编辑器构建工具一个Java库。不用再额外getter或者equals方法。

    京东技术:APPUI自动化测试框架及平台化探索

    UI自动化测试,即通过模拟手动操作用户UI界面方式,以代码方式实现自动操作验证自动化测试手段。

    文看懂mycat配置--数据库分离、分表分库

    波波说运维https://www.toutiao.com/i6742436467806568973 概述 系统开发中,数据库是非常重要一个点。除了程序本身优化,如:SQL语句优化、代码优化

    数据生成工具 ZenData 发布 1.5 版本,新增 CSV Excel 输出格式,字段定义支持表达式

    随着DevOps日益流行,越来越多团队开始关注持续集成持续交付。在这种大背景下,自动化测试就越来越重要了。那么问题来了,如何能够实现大规模、工程自动化测试呢?这里面会涉及到诸多问题,比如

    CCleaner v5.75.8238 发布,系统清理工具

    CCleaner v5.75.8238 现已发布,此版本包括对 cleaning、稳定性可用性改进。 Cleaner 是款系统优化隐私保护工具,主要用来清除 Windows 系统

    「性能与架构」MySQL 8 查询优化工具 Explain Analyze

    Explain 是我们常用查询分析工具,可以对查询语句执行方式进行评估,给出很多有用线索。

    Swagger接口文档工具:Knife4j 2.0.7 发布,细节优化

    Knife4j前身是swagger-bootstrap-ui,是一个为Swagger接口文档赋能工具 文档:https://doc.xiaominfo.com 效果(旧版):http

    还在为朋友圈积赞苦恼么

      还在为朋友圈积赞苦恼么 分分钟搞定 github地址--- https://github.com/TransparentLC/WechatMomentScreenshot 网站地址---- https://akarin.dev/We...

    能够替代 Jenkins 13个解决方案,了解下!

    Jenkins 是目前最常用持续集成工具,拥有近 50% 市场份额,它还是很多技术团队第一个使用自动化工具。但是随着自动化领域持续发展,Jenkins 逐渐暴露出了一些问题,例如缺乏功能

    Mysql优化---订单查询优化(1):视图优化+索引创建

    本文针对电商订单业务进行Mysql优化

    Fes.js v0.4.1 版本发布,优秀中后台系统前端解决方案

    Fes.js 是优秀中后台前端解决方案。提供初始项目、开发调试、Mock接口、编译打包命令行工具。内置布局、权限、数据字典、状态管理、存储、Api等多个模块。以约定、配置化、组件化设计思想