介绍SOARSQL Optimizer And Rewriter是小米公司开源的一款智能SQL优化与改写工具。它旨在帮助开发人员和DBA自动化地进行SQL质量检查、性能分析和语句改写从而提升代码质量并降低数据库风险。核心功能SOAR具备以下关键能力智能SQL优化建议不仅能指出常见的100多种SQL质量问题还能为复杂查询提供多列索引优化建议并支持UPDATE、INSERT、DELETE、SELECT等多种语句。自动SQL改写提供几十种常见场景下的SQL等价改写功能能将优化建议直接转化为可执行的SQL语句进一步简化优化成本。EXPLAIN信息解读能够自动获取并丰富解读SQL的执行计划EXPLAIN协助快速诊断性能瓶颈。辅助工具集提供SQL指纹、压缩、美化以及多条ALTER请求合并等辅助功能。体系架构SOAR由五大模块构成语法解析器SOAR本身不维护庞大的解析库而是集成并组合了Vitess、TiDB等多种优秀的语法解析器各取所长实现了灵活的SQL解析能力。集成环境区分线上环境和测试环境。SOAR会将线上表结构同步到测试环境进行分析从而可以在测试环境安全地执行高危操作避免影响线上数据。优化建议结合启发式规则专家经验、索引优化算法以及EXPLAIN信息解读生成多维度的优化建议。重写逻辑在提供建议的基础上实现SQL的自动等价改写将建议转化为可直接执行的SQL。工具集提供SQL格式化、Markdown转HTML等辅助小工具方便用户使用和美化输出。使用场景SOAR主要适用于以下人群和场景负责MySQL性能优化的DBA用于快速分析和诊断慢查询。需要批量审查业务SQL的开发者在代码上线前进行自助式SQL质量检查。希望建立SQL规范的工程团队将SOAR集成到CI/CD流程中作为SQL质量的门禁。希望对存量SQL做统一梳理的运维人员对历史遗留SQL进行批量分析和优化。获取与使用SOAR是一个跨平台工具支持Linux、macOS和Windows系统。开源地址项目源码托管在GitHub上采用Apache License 2.0开源协议。快速开始下载对应平台的二进制文件后无需复杂配置即可使用。例如通过管道将SQL语句传递给SOAR即可生成评审报告。echo select * from tb; | ./soarWeb图形界面除了命令行工具社区也提供了Web图形化版本如becivells/soar-web可通过Docker快速部署。docker run -d --name soar-web -p 5077:5077 becivells/soar-webSOAR的核心目标是将DBA的专家经验产品化帮助开发者在SQL编写阶段就发现问题防止问题SQL流入生产环境一下载SOAR-WEB下载GitHub - wjl88lhuc/soar-web: A web UI with soar · GitHubSOAR下载SOAR GitHub Releases下载soar.windows-amd64(linux版本要选择对应的下载)二配置在SOAR-WEB创建 Dockerfile文件# 构建阶段编译 soar-web FROM golang:alpine AS builder WORKDIR /app COPY go.mod go.sum ./ # 使用 vendor 构建跳过网络下载 COPY . . RUN go build -modvendor -o soar-web . # 运行阶段准备最终镜像 FROM alpine # 安装 glibc 兼容层使 soar 二进制文件能运行 RUN apk add --no-cache libc6-compat WORKDIR /app # 1. 创建 soar-bin 目录 RUN mkdir -p /app/soar-bin # 2. 将本地 soar 文件复制到镜像中 COPY soar /app/soar-bin/soar RUN chmod x /app/soar-bin/soar # 3. 复制编译好的 soar-web COPY --frombuilder /app/soar-web . EXPOSE 5077 CMD [./soar-web, --addr, :5077]三修改将soar.windows-amd64 修改为 soar四运行执行命令PowerShell 管理员运行1. 进入 cd D:\soar\soar-web2. 构建镜像 docker build --no-cache -t soar-web .3. 创建容器并后台运行同时将容器内部的端口映射到外部 docker run -d --name soar-web -p 5077:5077 soar-webWindows PowerShell 版权所有 (C) Microsoft Corporation。保留所有权利。 尝试新的跨平台 PowerShell https://aka.ms/pscore6 PS C:\Users\Administrator cd D:\soar\soar-web PS D:\soar\soar-web docker build --no-cache -t soar-web . [] Building 74.3s (18/18) FINISHED docker:desktop-linux [internal] load build definition from Dockerfile 0.0s transferring dockerfile: 703B 0.0s [internal] load metadata for docker.io/library/alpine:latest 0.1s [internal] load metadata for docker.io/library/golang:alpine 0.1s [internal] load .dockerignore 0.0s transferring context: 2B 0.0s CACHED [stage-1 1/7] FROM docker.io/library/alpine:latestsha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86 0.0s resolve docker.io/library/alpine:latestsha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec4349 0.0s [internal] load build context 0.1s transferring context: 107.37kB 0.1s [builder 1/5] FROM docker.io/library/golang:alpinesha256:0178a641fbb4858c5f1b48e34bdaabe0350a330a1b1149aabd4 0.0s resolve docker.io/library/golang:alpinesha256:0178a641fbb4858c5f1b48e34bdaabe0350a330a1b1149aabd498d0699f 0.0s CACHED [builder 2/5] WORKDIR /app 0.0s [stage-1 2/7] RUN apk add --no-cache libc6-compat 69.5s [builder 3/5] COPY go.mod go.sum ./ 0.0s [builder 4/5] COPY . . 0.6s [builder 5/5] RUN go build -modvendor -o soar-web . 7.1s [stage-1 3/7] WORKDIR /app 0.5s [stage-1 4/7] RUN mkdir -p /app/soar-bin 1.0s [stage-1 5/7] COPY soar /app/soar-bin/soar 0.5s [stage-1 6/7] RUN chmod x /app/soar-bin/soar 0.4s [stage-1 7/7] COPY --frombuilder /app/soar-web . 0.6s exporting to image 1.4s exporting layers 0.9s exporting manifest sha256:e1ba4f44259030a6ad8c62c521d2c7095ef47d1f7547be83aa070a897ba7722e 0.1s exporting config sha256:4dbb8a4678ec0336096f1b544073b2259017532fb7d0a9be563415d838b09e93 0.0s exporting attestation manifest sha256:91c56705db9d049500b46fd999df5b12c5e360c0e9ac0c7943c460b60268764a 0.1s exporting manifest list sha256:6e5ae0f01ec982c58d093811e0cb8f6761de64d8889607d8c433f361eee881bb 0.0s naming to docker.io/library/soar-web:latest 0.0s unpacking to docker.io/library/soar-web:latest 0.4s WARNING: current commit information was not captured by the build: git was not found in the system: exec: git.exe: executable file not found in %PATH% View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/eg6mf1bbcukmd7lqa7hpp0tt8 PS D:\soar\soar-web docker run -d --name soar-web -p 5077:5077 soar-web 76bb01c662c28b7a6c220e12178c7eb50d274172078e6754f86a4500059d8690 PS D:\soar\soar-web当然也可以docker 命令行执行也是可以的随便了五访问访问地址http://localhost:5077/webui