前言
在上文PawSQL: 企业级SQL审核工具的新玩家中说到,市场上主流的SQL审核工具,Yearning、Archery、Bytebase的审核模块、爱可生的SQLE、云和恩墨的SQM等,在规则覆盖度、或是正确率等方面存在明显不足,导致企业在引入产品后难以进行落地;PawSQL通过设计理念和核心技术的突破性创新,推出了自己的企业级SQL审核平台。
本次我们将深度评测这几款市场上主流SQL审核工具在审核规则覆盖度和审核结果正确性方面的表现。
规则覆盖度评测
为了提供直观的比较基础,我们简单地从规则数进行评价。我们从各个产品的最新文档或是DEMO环境获取了审核规则数最多的TOP5数据库类型。如下图所示,
由于Yearning、Archery和Bytebase的规则主要集中在DDL审核上,还难以称之为企业级的SQL审核平台,因此本文将重点放在SQLE、SQM和PawSQL三个企业级SQL审核产品的对比评测上。
SQLE:MySQL的审核专家
SQLE提供了154条针对MySQL的审核规则,以及对TDSQL for MySQL和OceanBase for MySQL的专门优化,显示出其在MySQL领域的专业性和深度。
SQM:Oracle的坚强后盾
SQM在Oracle数据库的审核上展现出了其强大的实力,提供了高达188条的审核规则。这一数字不仅体现了SQM对Oracle平台的深度支持,也反映了其在帮助企业应对复杂Oracle环境方面的能力;SQM为MySQL也提供了153条规则,说明它对MySQL也有非常好的规则覆盖度。
PawSQL:多种数据库审核的全能选手
与SQLE和SQM专注于特定数据库不同,PawSQL注重数据库类型支持的全面性和均衡性。PawSQL为MySQL、PostgreSQL、openGauss、Oracle和GoldenDB等多种数据库提供了大量的审核规则,规则数在各个数据库上都异常均衡,显示出其在多数据库环境中的优秀能力。PawSQL的优势在于能够为企业提供一致的审核体验,无论他们的数据库环境如何多样化。
审核正确性评测
由于SQLE、SQM和PawSQL三个产品在MySQL数据库上的规则数比较接近,我们都采用MySQL数据库的审核集进行评测。对于审核的对象,我们采用了TPC-H基准测试的8个建表语句和22个测试查询语句;我们采用离线审核的方式,以减少对环境的依赖。
DDL(建表语句)审核
下面是TPC-H基准测试的8个建表语句在三个平台上的审核结果。
SQM
SQLE
PawSQL
对比分析
可以看到,虽然SQLE和PawSQL的规则丰富度比SQM更好一些,但是三者在正确性方面都表现不错,SQLE和PawSQL出现的一个共同的误报问题,这是由于DDL外键/索引解析的错误导致的,案例如下:
CREATE TABLE ORDERS (
O_ORDERKEY INT NOT NULL,
...
KEY ORDERS_FK1 (O_CUSTKEY),
CONSTRAINT ORDERS_IBFK_1 FOREIGN KEY (O_CUSTKEY) REFERENCES CUSTOMER (C_CUSTKEY)
) ENGINE=INNODB
对于如上的建表语句,`KEY ORDERS_FK1 (O_CUSTKEY)`定义的索引会被外键使用。所以不会产生两个非主键索引,即无论是否`KEY ORDERS_FK1 (O_CUSTKEY)`是否存在,数据库都只会创建一个二级索引。PawSQL在其最新的版本中已完成了对此问题的修复。
DQL(查询语句)审核
下面是TPC-H基准测试的22个查询语句在三个审核平台上的审核结果。
SQM
解析能力:SQM在解析SQL语句时遇到了困难,无法解析5个SQL语句,占比超过20%,这表明其对Interval常量、CTE和substring等特殊语法的处理存在局限。
误告警率:在给出的12类SQL警告中,有4类为误告警,误告警率达到了33.3%,这对于SQL审核任务的准确性和效率构成了严重影响。
SQLE
解析能力:SQLE的表现稍好于SQM,无法解析的SQL语句有1个,占比超过5%,可能是由于无法解析CTE的特殊语法。
误告警率:SQLE给出的12类SQL警告中,有1类为误告警,误告警率接近10%,虽然比SQM低,但仍然对审核任务有一定的负面影响。
PawSQL
解析能力:PawSQL展现了出色的解析能力,能够完成所有22个SQL语句的解析,没有出现无法处理的情况。
警告准确性:PawSQL给出20种SQL警告或提示,远超SQLE和SQM,PawSQL不仅关注SQL语句的规范性和正确性,还提供了性能优化的规则,并且对潜在的正确性问题(NPE重写,IN可空子查询可能导致结果集不符合预期)进行了提示,显示了其规则的精确性和深入分析SQL结构的能力。
对比分析
-
解析能力:PawSQL在解析能力方面明显优于SQM和SQLE,能够处理所有测试SQL语句,而SQM和SQLE都存在无法解析的情况。
-
误告警率:SQM的误告率最高,达到33.3%,远高于SQLE的接近10%和PawSQL的无误告警,这可能严重影响用户对审核结果的信任度和审核任务的效率。
-
规则精确性和深度:PawSQL不仅在规则精确性上表现优秀,还基于对SQL结构的深入理解提出了SQL性能调优的建议,而SQM和SQLE在这方面的表现则相对较弱。
说明
1. 本次测评中使用的SQLE的版本为部署在公网的企业版demo环境,地址为(http://demo.sqle.actionsky.com:8889/); 评测使用的SQM版本号为6.2,二者可能不是具有最新功能的版本,评测结果仅供参考。
2. 评测使用的TPCH测试集的DDL和DQL语句可以通过以下地址获取,读者可以自行验证。
https://github.com/Paw-SQL/PawSQL/tree/main/document/TPCH-Script(MySQL-Syntax)
总结
SQL审核是SQL代码投入生产的最后一道关卡,选择正确的SQL审核工具对于确保确保SQL代码质量至关重要。评测结果表明,即使用MySQL规则集作为测试对象,PawSQL在这次测试中表现也是最佳。借用友商的一句话,史上最强的SQL审核平台,不服来战。
关于PawSQL
PawSQL专注数据库性能优化的自动化和智能化,提供的解决方案覆盖SQL开发、测试、运维的整个流程,支持MySQL,PostgreSQL,openGauss,Oracle等各种数据库。