Docker 安装 SOAR
介绍
SOAR(SQL 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;" | ./soar -
Web图形界面:除了命令行工具,社区也提供了Web图形化版本(如
becivells/soar-web),可通过Docker快速部署。docker run -d --name soar-web -p 5077:5077 becivells/soar-web
SOAR的核心目标是将DBA的专家经验产品化,帮助开发者在SQL编写阶段就发现问题,防止问题SQL流入生产环境
一,下载
SOAR-WEB下载:GitHub - wjl88lhuc/soar-web: A web UI with soar · GitHub
SOAR下载: 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 -mod=vendor -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 --from=builder /app/soar-web .
EXPOSE 5077
CMD ["./soar-web", "--addr", ":5077"]
三,修改
将soar.windows-amd64 修改为 soar

四,运行
执行命令,PowerShell 管理员运行
1. 进入 cd D:\soar\soar-web
2. 构建镜像 docker build --no-cache -t soar-web .
3. 创建容器并后台运行,同时将容器内部的端口映射到外部 docker run -d --name soar-web -p 5077:5077 soar-web
Windows 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:latest@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86 0.0s
=> => resolve docker.io/library/alpine:latest@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec4349 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 107.37kB 0.1s
=> [builder 1/5] FROM docker.io/library/golang:alpine@sha256:0178a641fbb4858c5f1b48e34bdaabe0350a330a1b1149aabd4 0.0s
=> => resolve docker.io/library/golang:alpine@sha256: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 -mod=vendor -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 --from=builder /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 命令行执行也是可以的,随便了

五,访问

更多推荐

所有评论(0)