一、Soar介绍
Soar是在2018年10月2
项目地址:https://github.com/XiaoMi/soar
二、功能特点
- 跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试)
- 目前
原文链接:https://www.dqzboy.com 只支持 MySQL 语法族协议的 SQL 优化 - 支持基于启发式算法的语句优化
- 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)
- 支持 EXPLAIN 信息丰富解读
- 支持 SQL 指纹、压缩和美化
- 支持同一张表多条 ALTER 请求合并
- 支持自定义规则的 SQL 改写
三、安装部署
- Soar的安装很简单,只需要将项目下载下来后,执行soar命令即可使用
[root@localhost ~]# wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.linux-amd64 -O soar
#或者下载到本机PC再上传至服务器
[root@localhost ~]# mv soar.linux-amd64 soar
[root@localhost ~]# chmod +x soar
[root@localhost ~]# mv soar /usr/local/bin/
[root@localhost ~]# soar --version
Version: 2019-01-21 16:54:09 +0800 0.11.0-16-gc12ae96
Branch: master
Compile: 2019-01-21 16:55:46 +0800 by go version go1.10.7 linux/amd64
GitDirty: 0
四、使用测试
[root@localhost ~]# soar -query "select * from tb;"
# Query: 09D1F5952A76399F
★ ★ ★ ☆ ☆ 75分
```sql
SELECT
*
FROM
tb
```
## 最外层 SELECT 未指定 WHERE 条件
* **Item:** CLA.001
* **Severity:** L4
* **Content:** SELECT 语句没有 WHERE 子句,可能检查比预期更多的行(全表扫描)。对于 SELECT COUNT(\*) 类型的请求如果不要求精度,建议使用 SHOW TABLE STATUS 或 EXPLAIN 替代。
## 不建议使用 SELECT * 类型查询
* **Item:** COL.001
* **Severity:** L1
* **Content:** 当表结构变更时,使用 \* 通配符选择所有列将导致查询的含义和行为会发生更改,可能导致查询返回更多的数据。

五、结合Jenki文章来源(Source):https://www.dqzboy.com ns
1、安装插件
- Jenkins需要安装插件 HTMLResource,这样才可以将报告通过html方式查看,
原文链接:https://www.dqzboy.com 安装Email Extension插件实现邮件通知

2、配置邮件

- Linux系统上安装Email服务
[root@localhost ~]# yum -y install sendmail
[root@localhost ~]# yum install -y mailx
[root@localhost ~]# yum -y install jwhois
3、编写代码
//解决HTML显示问题
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP","")
pipeline {
agent { node {label "master"}}
stages {
stage("CreateSQLFile"){
steps{
script{
sh "echo '${SQL};' > migrate.sql && cat migrate.sql"
}
}
}
stage("SoarSQL"){
steps{
script{
sh """
#一般jenkins是普通用户运行的,所以把soar命令拷贝到当前jenkins运行用户的家目录下,防止权限问题导致命令无法执行
/home/deploy/soar -report-type html -query v${ProjectName}-migrate.sql > soarsql.html
cat soarsql.html
"""
publishHTML([allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: '', reportFiles: ' soarsql.html', reportName: 'SQLreport', reportTitles: ''])
Email("SQL审核完成 <a href='http://192.168.66.101:8080/ /view/${JOB_NAME}/job/${JOB_NAME}/SQLreport/'>审核报告</a>","${EmailUser}") #Job传入email地址
}
}
}
}
}
//定义邮件内容
def Email(status,emailUser){
emailext body: """
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<img src="http://192.168.66.112/jenkins.jpg"> //logo地址
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
</td>
</tr>
<tr>
<td>
<ul>
<li>项目名称:${JOB_NAME}</li>
<li>构建编号:${BUILD_ID}</li>
<li>构建信息: ${status} </li>
<li>项目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
</ul>
</td>
</tr>
<tr>
</table>
</body>
</html> """,
subject: "Jenkins-${JOB_NAME}项目构建信息 ",
to: emailUser
}
- 如果执行构建出现以下错误,这是因为Jenkins不允许使用外部的css等样式,需要允许后才可以执行

- 处理方案
文章来源(Source):浅时光博客 就是点击下图部分,然后跳转进去选择允许运行脚本

4、创建任务
- 现在我们创建一个流水线任务,配置如下





5、执行构建
5.1:查看分析结果



5.2:查看邮箱消息

能显示中文了,不过Jenkins和soar是安装在一台linux机器上的吗,Jenkins和soar我不知道咋结合
可以同一台也可以不是同一台,反正就是Jenkins去调用soar二进制执行文件的
大佬,具体咋调用呀,你教程里有写吗?
有写呀,那个pipeline代码里 调用sh模块执行
大佬,soar使用的时候无法显示汉字是啥原因?
啥意思,安装中文插件