41

小米开源自研智能 SQL 优化与改写工具 SOAR 使用指南

 5 years ago
source link: https://mp.weixin.qq.com/s/7sj2HnOQsNP_Zf_07C1FFQ?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

yIv6BfB.gif

本文简述了SOAR的下载安装和使用方法,并介绍了SOAR的基础设置和应用的四个场景。

上篇文章回顾: 基于线性回归的故障恢复时间预测

在10月20日的开源先锋日(OSCAR)上,小米开源了自研的SOAR(SQL Optimizer And Rewriter)。这是一款智能SQL优化和改写工具,开发人员可以直接通过此工具快速的对自己的SQL进行质量检查,生成评估报告,防止将问题SQL带到线上从而导致服务质量下降。它不仅能够尽可能地提高线上代码质量,还能避免一些由于人为疏漏而带来的隐患。

下载安装

SOAR使用Go语言编写,天然具备操作系统跨平台属性,您可以在Github上的Release版本按照对应操作系统直接下载编译好的二进制文件使用。如果您是资深定制用户也可以参见左下方 “阅读原文” 下载代码,按下图所示编译安装。

二进制安装

QjENFvF.png!web

源码安装

7Bnyqym.png!web

使用指南

快速上手

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

2Y3memM.png!web

UbmaY3y.jpg!web

使用配置

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

SOAR的配置文件为YAML [1] 格式,在一般情况下只需要配置online-dsn, test-dsn, log-output等少数几个参数,您就可以体验到SOAR提供的绝大部分的功能了。

下面我将介绍一下SOAR中常用的一些基础配置。

配置环境

由于很多的功能需要数据库的元数据来进行辅助判断,所以当不指定数据库环境的时候,很多功能将会采取降级的策略,所以我们强烈建议您在配置文件中指定相关数据库环境。为了保护线上数据库的安全,我们将数据库环境区分为线上和测试两种环境,但是这并不意味着您一定需要两个数据库环境,但至少建议您指定一个测试环境。
这里需要注意的是,因为我们会在测试环境中做一些风险相对较高的操作,为了防止用户由于配置疏忽导致线上数据受损,我们添加了allow-online-as-test参数来保证您确实是希望将线上环境做为测试环境来使用。所以当您指定的两个集成环境相同时,请指定allow-online-as-test为true,否则SOAR将不会进行评审。

输出格式

SOAR自身支持了非常丰富的输出格式,除了默认的Markdown格式以外,SOAR还支持以 HTML或JSON的格式进行输出。
SOAR自带的一些工具也会以report-type的形式提供。比如SQL重写,EXPLAIN分析,SQL 指纹,SQL美化等15种输出格式,每一种report-type都对应着不同的功能。你可以通过如下命令查看SOAR支持的输出类型。

获取帮助

除了上述提到的这些功能,SOAR还提供了很多其他的配置项,由于篇幅所限,具体详情您可以到SOAR项目文档中查看。使用上如果碰到疑问,可以到这里 [2] 提交Issue,或在Gitter [3] 中联系我们。

场景介绍

场景 线上环境 测试环境 应用类型 场景一 日常优化,完整的建议,推荐 场景二 新申请资源,环境初始化测试 场景三 盲测,试用,无EXPLAN和索引建议 场景四 用线上环境当测试环境,不推荐

场景一

这个场景是我们日常工作中最常见的场景,它主要应用于线上服务日常创建表或表结构表更。

SOAR对SQL进行分析时,会先从SQL语句中获取基本信息,然后将所有涉及到的库表结构元数据从线上环境中获取,并同步到测试环境中进行更进一步的分析。在这个场景下,SOAR能提供最全面的功能支持。不仅能够输出110多项SQL检查,还能够对涉及到的库表进行索引分析,而且还可以输出EXPLAIN、PROFILE等信息来辅助DBA或开发者进行性能调优和问题定位。SQL改写也会依赖元数据的支持,在此场景下的功能是支持的最全面的。

场景二

这个场景适用于首次申请数据库资源的情况,此时还没有已经存在的线上环境与之相对应。

在这个场景下,SQL文件主要包含的是建库建表语句,SOAR会根据DDL生成相应的测试环境,并从该环境中获取元数据进行优化分析。

场景三

在这一场景下由于没有配置线上环境和测试环境依赖,缺少很多分析时必要的元数据,且无法获取EXPLAIN等信息,在这种情况下SOAR将会进行功能降级,只给予部分不依赖数据库环境才能给出的建议(绝大部分的启发式建议和小部分SQL改写)。

虽然在这个场景下服务的功能并不全面,但执行速度也是最快的,这种场景依然能提供110多种启发式建议,特别适合于对SQL本身的检测,比如作为一个本地化的SQL Linter IDE插件。

场景四

这一场景其实与场景二是一样的,在这一场景下只配置了线上环境,且开启了允许线上环境作为测试环境。那么在不指定测试环境的情况下SOAR将会把测试环境也指向线上环境。

SOAR在进行评审时,为了保证多个客户端能够同时在一个环境内进行评审,会在测试环境中生成一个临时数据库,评审正常结束后再将该临时数据库删除。所以 我们非常不建议将线上数据库环境做为测试环境 ,防止在某些未知的极端条件下对数据库产生严重影响。

参考

[1] https://en.wikipedia.org/wiki/YAML

[2] https://github.com/XiaoMi/soar/issues

[3] https://gitter.im/xiaomi-dba/soar

BRfAnui.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK