
SOAR
SOAR(SQL Optimizer And Rewriter) 是一个对 SQL 进行优化和改写的自动化工具。由小米人工智能与云平台的数据库团队开发与维护。
功能特点
跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试)
目前只支持 MySQL 语法族协议的 SQL 优化
支持基于启发式算法的语句优化
支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)
支持 EXPLAIN 信息丰富解读
支持 SQL 指纹、压缩和美化
支持同一张表多条 ALTER 请求合并
支持自定义规则的 SQL 改写
业内其他优秀产品对比

体系架构

SOAR主要由语法解析器,集成环境,优化建议,重写逻辑,工具集五大模块组成。
语法解析和语法检查
SOAR的实现方案是松散的、可插拔的。SOAR并不直接维护庞大的语法解析库,它把各种优秀的语法解析库集成在一起,各取所长。
集成环境
集成环境区分线上环境和测试环境两种,分别用于解决不同场景下用户的SQL优化需求。
优化建议
目前SOAR可以提供的优化建议有基于启发式规则(通常也称之为经验)的优化建议,基于索引优化算法给出的索引优化建议,以及基于EXPLAIN信息给出的解读。
重写逻辑
为了进一步简化SQL优化的成本,SOAR又进一步挖掘了自动SQL重写的功能。现在提供几十种常见场景下的SQL等价转写。
工具集
SOAR还提供了一些辅助的小工具,比如markdown转HTML工具,SQL格式化输出工具等等。
具体使用我们可以使用soar的可视化工具——SOAR-Web!
SOAR-Web的核心功能是对SQL进行解析、优化建议以及性能评估。它利用SQL解析库,将复杂的SQL语句转换为易于理解和操作的数据结构,然后根据数据库引擎的特性给出优化策略。此外,SOAR-Web还提供了查询执行计划的可视化展示,帮助用户快速理解查询过程。
功能介绍
关于存储: 所有的配置都是保存在浏览器 Local Storage 中的,多人之间使用是互不影响的,自己只能看到自己的配置,更换浏览器或者清除浏览器会造成配置丢失。
关于加密: 配置信息在发送给服务端前会进行 RSA 和 AES 加密,防止配置信息被窃取。
配置模板: 可以添加多数据库连接实例及配置,方便在 sql 评估时切换使用。
数据库连接: 数据库连接成功后,soar 可以通过表结构提供更正确优质的 sql 评估建议, 配置的正确性决定了 soar 的服务质量。
线上线下环境问题: 线上环境作为待 sql 评估环境,soar 在进行 sql 评估时,会根据 sql 语句,从 线上环境的数据库连接实例 拷贝数据表到 测试环境的数据库连接实例,然后在测试环境下执行 sql 语句进行分析。因此测试环境的数据库连接实例需要有最高权限。如果没有最高权限可能造成一些问题,如果没有权限可以启动一个空的 mysql docker 容器作为测试环境。如果仅仅做测试用,可将线上线下环境指定为一样。
日志等级: 日志等级为 0 时不打印日志,设置为 1-7 时,会将 soar 产生的日志打印至控制台,按 F12 或右击网页点击审查元素打开调试工具,点击 Console 按钮查看日志。
soar 版本: 打开控制台输入:soarVersion(),可查看 soar 版本信息。
API接口集成
SOAR-Web支持多种数据库(如MySQL, PostgreSQL等)并通过RESTful API与之通信,方便与其他系统集成。这使得SOAR-Web可以无缝嵌入现有的开发流程中,成为提升整个团队工作效率的重要工具。
应用场景
数据库性能监控:对SQL查询进行实时监控,发现慢查询并进行优化。
开发阶段的SQL审查 - 开发者可以在编写SQL时即时获取优化建议,避免因低效查询导致的问题。
问题排查:当应用出现性能瓶颈时,SOAR-Web可以帮助迅速定位到问题SQL,提供优化方案。
团队协作:共享查询结果和优化建议,促进团队间的知识共享和最佳实践。
安装使用
拉取镜像
docker pull becivells/soar-web

查看镜像
docker images |grep soar
![]()
容器运行
docker run -d --name soar-web -p 5077:5077 becivells/soar-web
![]()

访问页面:http://127.0.0.1:5077

SOAR配置

SQL评估

美化

压缩

指纹

语法检查

SQL改写

日志等级设置

源码地址:
SOAR
https://github.com/XiaoMi/soar
soar-web
https://github.com/xiyangxixian/soar-web
浙公网安备 33010602011771号