内容简介:本文介绍了soar可以提供的功能以及一些使用场景,并给出相关用例。上篇文章回顾:本文首发于公众号“小米运维”,点击查看原文
本文介绍了soar可以提供的功能以及一些使用场景,并给出相关用例。
上篇文章回顾: dpdk-lvs的一次线上故障排查报告
soar开源两周以来,在Github获得了社区2700+颗星的支持,这期间有很多的开源社区同学参与到soar的成长当中,为我们提供了许多优秀的意见和建议。
我们希望能够有更多的人来感受一下这款“SQL优化神器”能够带给你的方便和快捷,这篇文章将会对soar可以提供的功能以及一些使用场景做出介绍,并给出相关用例。
1、基本用法
echo "select title from sakila.film" | ./soar -log-output=soar.log复制代码
soar可以通过管道的方式接受传入的SQL,也可以通过-query的方式来传入 SQL 或指定输入源。使用方式示例如下:
# 从文件读取SQL ./soar -query file.sql # 从管道读取SQL cat file.sql | ./soar复制代码
在日常使用的时候,如果您是为了快速获得简单SQL的评审结果,可以用命令行方式进行传入。但我们建议使用文件的方式进行传入,来避免可能存在的转义问题。
2、制定配置文件
在之前的系列文章中我们提到了配置文件的重要性,配置的正确性决定了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.*"复制代码
4、丰富的报告格式
soar支持多种输出方式,默认情况下为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 $? 1复制代码
6、SQL重写
soar提供了一定的基于抽象语法树实现的SQL重写能力。虽然现在这一个功能尚处于研发测试阶段,但是某些小的功能已经相对比较完善了,以下举例几个简单地重写使用场景。
- 将UPDATE/DELETE/INSERT语法转为SELECT
在某些情况下,我们需要对非查询语句进行性能分析,为了保证安全,我们可以先通过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 ;复制代码
7、EXPLAIN信息分析报告
有时我们获取到了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**: 最坏的情况, 从头到尾全表扫描.复制代码
8、markdown转HTML
如果您没有适合的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复制代码
本文首发于公众号“小米运维”,点击查看原文
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Iterative Methods for Sparse Linear Systems, Second Edition
Yousef Saad / Society for Industrial and Applied Mathematics / 2003-04-30 / USD 102.00
Tremendous progress has been made in the scientific and engineering disciplines regarding the use of iterative methods for linear systems. The size and complexity of linear and nonlinear systems arisi......一起来看看 《Iterative Methods for Sparse Linear Systems, Second Edition》 这本书的介绍吧!