本文介绍了soar可以提供的功能以及一些使用场景,并给出相关用例。

上篇文章回顾:

soar开源两周以来,在Github获得了社区2700+颗星的支持,这期间有很多的开源社区同学参与到soar的成长当中,为我们提供了许多优秀的意见和建议。

我们希望能够有更多的人来感受一下这款“SQL优化神器”能够带给你的方便和快捷,这篇文章将会对soar可以提供的功能以及一些使用场景做出介绍,并给出相关用例。

echo "select title from sakila.film" | ./soar -log-output=soar.logsoar可以通过管道的方式接受传入的SQL,也可以通过-query的方式来传入SQL或指定输入源。使用方式示例如下:

# 从文件读取SQL

./soar -query file.sql

# 从管道读取SQL

cat file.sql | ./soar在日常使用的时候,如果您是为了快速获得简单SQL的评审结果,可以用命令行方式进行传入。但我们建议使用文件的方式进行传入,来避免可能存在的转义问题。

在之前的系列文章中我们提到了配置文件的重要性,配置的正确性决定了soar的服务质量。用户可以通过以下案例的方式来编辑soar的配置文件。在不指定配置文件的情况下,soar默认会从依次检查/etc/soar.yaml,./etc/soar.yaml以及./soar.yaml这三个路径,配置文件优先级依次递减。

vi soar.yaml

# yaml format config file

online-dsn:

addr: 127.0.0.1:3306

schema: sakila

user: root

password: "1t'sB1g3rt"

disable: falsetest-dsn:

addr: 127.0.0.1:3306

schema: sakila

user: root

password: "1t'sB1g3rt"

disable: false如果您需要临时指定某些变量,可以用命令行参数的形式来指定需要的变量。命令行模式下的配置设置优先级最高。

echo "select title from sakila.film" | ./soar -test-dsn="root:1t'sB1g3rt@127.0.0.1:3306/sakila" -allow-online-as-test -log-output=soar.log但通过命令行的方式输入配置可能会存在转义的问题,您也可以使用-config的方式来指定您需要的配置文件。

echo "select title from sakila.film" | ./soar -config=mysoar.yaml -allow-online-as-test -log-output=soar.log启发式规则3您可以通过-list-heuristic-rules的方式来查看目前soar支持的全部启发式规则建议,默认输出的是markdown格式的文档,您可以重定向到一个文件中进行查看,soar提供的启发式建议的相关文档就是通过这一方式生成的。

$ soar -list-heuristic-rules 忽略某些规则soar中是可以通过配置-ignore-rules的方式来忽略某些建议的输出。可以用正则的方式来进行全局匹配,也可以指定某个特定的规则item来进行精准屏蔽,多条规则之间用逗号分离。

$ soar -ignore-rules "ALI.001,IDX.*"丰富的报告格式4soar支持多种输出方式,默认情况下为markdown格式的输出,您可以根据需要设置您的输出方式,比如json,比如html等。

$ soar -report-type json-reprot-type除了可以调整输出格式,某些特定的功能也是以-report-type的方式来提供的。比如SQL重写,比如fingerprint等。与查看启发式规则一样,想要查看soar支持的全部-report-type,可以通过-list-report-types的方式来查看支持的全部使用方式。

$ soar -list-report-types快捷的语法检查工具5虽然soar的功能非常丰富,但是在某些特定情况下,比如写了一条SQL却并不能肯定语法是否是正确的,那么可以通过soar提供的语法检查工具来对SQL语法进行检查,此时只会检查语法的正确性而不会进行一步的评审。

$ echo "select * from tb" | soar -only-syntax-check

$ echo $?0$ echo "select * fromtb" | soar -only-syntax-check

At SQL 0 : syntax error at position 16 near 'fromtb'$ echo $?

1SQL重写6soar提供了一定的基于抽象语法树实现的SQL重写能力。虽然现在这一个功能尚处于研发测试阶段,但是某些小的功能已经相对比较完善了,以下举例几个简单地重写使用场景。

在某些情况下,我们需要对非查询语句进行性能分析,为了保证安全,我们可以先通过soar将这些语句转化成等价的select语句,在对这些查询语句进行进一步分析。

$ echo "update film set title = 'abc'" | soar -rewrite-rules dml2select,delimiter -report-type rewrite输出

select * from film; 输入标题合并多条ALTER语句当线上数据库环境需要需要进行更新操作时,为了让某些在线改表工具正确的执行,我们应该将同一张表的多条alter语句合并为一条。soar提供了这样的功能来方便研发人员或DBA进行合并。

$ echo "alter table tb add column a int; alter table tb add column b int;" | soar -report-type rewrite -rewrite-rules mergealter输出

ALTER TABLE `tb` add column a int, add column b int ;EXPLAIN信息分析报告7有时我们获取到了EXPLAIN信息,但可能对于MySQL EXPLAIN的内容不熟悉。您可以将mysql输出的EXPLAIN信息交给soar,来帮助辅助解读其中的信息。这里传入的explain可以是普通的表格,也可以是MySQL的JSON格式EXPLAIN。

$ soar -report-type explain-digest << EOF

+----+-------------+-------+------+---------------+------+---------+------+------+-------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------+

| 1 | SIMPLE | film | ALL | NULL | NULL | NULL | NULL | 1131 | |

+----+-------------+-------+------+---------------+------+---------+------+------+-------+

EOF默认输出结果为markdown格式。

## Explain信息

| id | select\_type | table | partitions | type | possible_keys | key | key\_len | ref | rows | filtered | scalability | Extra |

|---|---|---|---|---|---|---|---|---|---|---|---|---|

| 1 | SIMPLE | *film* | NULL | ALL | NULL | NULL | NULL | NULL | 0 | 0.00% | ☠️ **O(n)** | |

### Explain信息解读

#### SelectType信息解读

* **SIMPLE**: 简单SELECT(不使用UNION或子查询等).

#### Type信息解读

* ☠️ **ALL**: 最坏的情况, 从头到尾全表扫描.markdown转HTML8如果您没有适合的markdown工具,soar也自带了markdown转html这样的功能,尽可能的让所有人都能感受到soar原生报告的优雅。你还可以通过指定-report-css, -report-javascript, -markdown-extensions, -markdown-html-flags这些参数控制HTML的显示格式。

$ cat test.md | soar -report-type md2html > test.html清理测试环境残余的临时库表9如配置了-drop-test-temporary=false或soar异常中止,-test-dsn中会残余以optimizer_为前缀的临时库表。手工清理这些库表可以使用如下命令。

注意:为了不影响正在进行的其他SQL评审,-cleanup-test-database中会删除1小时前生成的临时库表。

./soar -cleanup-test-database

InfoQ即将在11月16-19日上海举办CNUTCon全球运维技术大会。本届 CNUTCon全球运维技术大会面向各行业对运维&容器技术感兴趣的中高端技术人员,聚焦AIOps相关技术及优秀实践,携手一线技术专家输出技术干货,促进全球运维技术交流,推动国内技术升级,同时使企业可以更精准地确定自己的选型方案,并提前预估相关的风险和收益,实现技术落地。

届时16日下午还会有小米的资深架构师孙寅关于《小米弹性调度平台》的分享,以及小米的架构师王福关于《小米研发效能》的分享,现场精彩不容错过!

mysql 快速入门,SOAR 101 快速入门指南相关推荐

  1. 网络编程懒人入门(三):快速理解TCP协议一篇就够

    1.前言 本系列文章的前两篇<网络编程懒人入门(一):快速理解网络通信协议(上篇)>.<网络编程懒人入门(二):快速理解网络通信协议(下篇)>快速介绍了网络基本通信协议及理论基 ...

  2. Electron 快速开始(一)-入门基础、使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序

    文章目录 Electron 快速开始(一)-入门基础.使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序 Electron简介 多进程模型​ Electron 快速开始 管理窗 ...

  3. python魔力手册-小白入门宝典:Python快速入门魔力手册 PDF 超清版

    给大家带来的一篇关于Python编程相关的电子书资源,介绍了关于小白入门.python入门.Python手册方面的内容,本书是由魔力手册出版,格式为PDF,资源大小11.8 MB,魔力手册编写,目前豆 ...

  4. 0基础入门,如何快速上手Python?

    0基础入门,如何快速上手pythpn 新的改变 因为清晰易读的风格,广泛的适用性,python已经成为最受欢迎的编程语言之一,在TIOBE排行榜位居第四,是名副其实的人工智能第一语言. python ...

  5. 网络编程懒人入门(二):快速理解网络通信协议(下篇)

    1.前言 本文上篇<网络编程懒人入门(一):快速理解网络通信协议(上篇)>分析了互联网的总体构思,从下至上,每一层协议的设计思想.基于知识连贯性的考虑,建议您先看完上篇后再来阅读本文. 本 ...

  6. 网络编程懒人入门(一):快速理解网络通信协议(上篇)

    1.写在前面 论坛和群里常会有技术同行打算自已开发IM或者消息推送系统,很多时候连基本的网络编程理论(如网络协议等)都不了解,就贸然定方案.写代码,显得非常盲目且充满技术风险. 即时通讯网论坛里精心整 ...

  7. el-date-picker设置默认日期_ERP入门教程:快速掌握金蝶ERP的基础-物料批次管理的应用及设置...

    ERP入门教程:快速掌握金蝶ERP的基础-物料的批次管理的应用及设置 关注我,我将定期分享更多的ERP解决方案 转发关注并私信我,了解更多的解决方案及操作方法哦 一.应用软件版本:金蝶KIS旗舰版6. ...

  8. 云开发系列课程让你从入门到精通快速上手Serverless和云开发技术

    简介:云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术.学习内容涵盖云开发协同.云函数.云数据库.多媒体托管.前后端一体化框架等Serverless Web开发必备知识.希 ...

  9. Flowable 快速入门教程:Flowable 入门开发案例,结合流程设计器详细讲解

    Flowable 快速入门教程:Flowable 入门开发案例,结合流程设计器详细讲解 前言 流程设计器集成 整体流程图 流程节点说明 第一审核人节点:实际设置审核人 配置信息 说明 第二审核人:参数 ...

最新文章

  1. 浅谈机器学习在市场营销中的应用
  2. matlab 级联cic,Matlab中CIC滤波器的应用
  3. python 添加类属性
  4. 栏目图片 栏目描述_网站描述怎么写?对网站优化有什么作用?
  5. tableau可视化数据分析60讲(八)-tableau计算函数(重点知识)
  6. haskell,lisp,erlang你们更喜欢哪个?
  7. Strut2和FreeMarker整合时的一些问题
  8. NOIP模拟测试9「随·单·题」
  9. 关于浏览器前进键和后退键样样式表冲突的问题
  10. T1013 求先序排列 codevs
  11. 52 - LeetCode-13 -罗马数字转整数_罗马数字转数字
  12. 大数据之-Hadoop3.x_Yarn_全流程作业---大数据之hadoop3.x工作笔记0143
  13. 如何启动mysql集群_如何搭建一个 MySQL 分布式集群
  14. Eclipse环境变量配置
  15. SVN创建分支与分支合并主干
  16. Exporting the operator hardsigmoid to ONNX opset version 11 is not supported
  17. python的debug为什么点第一行直接运行结束了_Python 代码调试工具 pdb 快速入门
  18. 工作态度决定了工作结果
  19. 听别人的故事探索属于自己的方法
  20. Android 切换双卡数据链接__2019.11.22

热门文章

  1. 解决ios手机vue H5页面输入键盘收起后页面回弹到顶部问题
  2. 如何批量转换文件格式
  3. 约翰·卡马克和他的id Software
  4. 两层全连接网络反向传播梯度推导(矩阵形式、sigmoid、最小均方差MSE)
  5. 测试个人禀赋的软件,中医体质自测,个人体质测试,体质健康测试,测试自己的体质...
  6. 云产研见客户的行为分析
  7. Gym 100712G Heavy Coins
  8. html5 lineheight属性,深入理解line-height属性
  9. 《Python编程初学者指南》 道森中文版附源代码
  10. php网页解析器,浅析php插件 HTMLPurifier HTML解析器