2.2304.0
SQLE Release Notes
SQL审核工具 SQLE 2.2303.0 已经发布。以下对新版本的 Release Notes 进行详细解读。
文章主要分为以下三部分内容:
一、SQLE 项目介绍
二、新版本主要功能总结
三、完整的release信息
一、SQLE 项目介绍
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
如何获取:
类型 | 地址 |
---|---|
版本库 | https://github.com/actiontech/sqle |
文档 | https://actiontech.github.io/sqle-docs-cn/ |
发布信息 | https://github.com/actiontech/sqle/releases |
数据审核插件开发文档 | https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_auditplugin/auditplugin_development.html |
社区版在线体验 | http://demo.sqle.actionsky.com 超级管理员:admin,密码:admin。 |
企业版在线体验 | http://demo.sqle.actionsky.com:8889 用户:admin,密码:admin。 |
二、新版本主要功能总结
1. 新增SQL影响行数预测功能【企业版】
当用户需要了解SQL实际的影响行数时,现有执行计划中仅能提供预估的影响行数,将与实际存在差异,无法用以评估SQL实际性能。因此,平台在审核结果-SQL分析中,新增影响行数字段,用户可通过查看该条SQL的影响行数,评估其执行性能。以下是简单的功能试用:
用户点击审核结果中的SQL分析,在性能panel中查看该条SQL的影响行数。MySQL、Oracle、PostgreSQL、SQL Server 本月均已完成支持。
2. 审核结果突出规则程度及数量
当进行SQL审核时,用户需要了解触发的审核规则的严重程度,确认触发的规则是否有超出自身设置的审核等级。因此,平台对审核结果栏进行优化,优先展示SQL触发的规则等级及数量。以下是简单的功能试用:
用户查看审核结果,查看触发的规则等级及数量
点击展开,查看触发的规则详情
3. 新增processlist列表扫描任务,支持事中审核
除了上线前和上线后的审核,用户往往还需要在SQL语句执行过程中对其进行监控和审核,用以及时识别出潜在的问题SQL。然而,当前的审核场景往往无法覆盖事中这一环节的审核。为此,SQLE新增了processlist列表审核扫描任务,实现了事前、事中、事后的全覆盖,使得用户可以在SQL语句的整个生命周期内进行审核和管理,从而减少审核时间和工作量。以下是简单的使用步骤:
用户在智能扫描任务列表新增processlist列表扫描任务,任务创建后,页面将按照审核周期生成任务报告。
- 采集周期(秒):表示SQLE对 MySQL processlist 的采集频率,SQLE将按照该时间间隔进行 SQL采集。如果该值过低,会影响实例性能;
- SQL最小执行时间(秒):表示SQLE对 MySQL processlist 的采集过滤条件,只有大于等于该时间的SQL才会被采集记录。如果为0,则表示不进行过滤;
- 审核过去时间段内抓取的SQL(分钟):processlist列表扫描任务是增量审核,不在该时间段内执行的SQL将不会被再次采集
4. 提供易于理解的改进建议
我们的SQL审核和质量管控工具不仅可以为用户提供审核结果,还可提供细化的审核建议。当SQL语句被审核规则标记为有问题时,面对精简的规则提示,用户可能会对如何优化现有SQL感到困惑。为了帮助用户更好地理解审核结果并解决问题,我们在审核结果中加入了详细的审核建议说明。由此用户可以更好地理解并采取适当的修改策略,更高效地提高SQL语句质量。以下是简单的功能试用:
工单审核结果页面,在审核结果中查看触发的审核规则,鼠标移入后查看审核建议:
扫描任务审核结果页面,在生成的报告详情中查看触发的审核规则,鼠标移入后查看审核建议:
5. 新增一批 MySQL 审核规则
检查LIMIT的偏移offset是否过大
因为offset指定了结果集的起始位置,如果起始位置过大,那么 MySQL 需要处理更多的数据才能返回结果集,这可能会导致查询性能下降。
UPDATE/DELETE操作需要有WHERE条件
因为这些语句的目的是修改数据库中的数据,需要使用 WHERE 条件来过滤需要更新或删除的记录,以确保数据的正确性。另外,使用 WHERE 条件还可以提高查询性能。
禁止过度使用绑定变量
因为过度使用绑定变量会增加查询的复杂度,从而降低查询性能。过度使用绑定变量还会增加维护成本。
连接操作必须指定连接条件
指定连接条件可以确保连接操作的正确性和可靠性,如果没有指定连接条件,可能会导致连接失败或连接不正确的情况。
SQL中使用了COUNT(col)
建议使用COUNT(*),因为使用 COUNT(col) 需要对表进行全表扫描,这可能会导致性能下降。
索引字段需要有非空约束
索引字段上如果没有非空约束,则表记录与索引记录不会完全映射。
执行计划中不能存在索引全扫描步骤
在数据量大的情况下索引全扫描严重影响SQL性能。
执行计划中不能存在索引跳扫
索引扫描是跳转扫描,未遵循最左匹配原则。
update和delete语句评估影响行数过大
如果 DML 操作影响行数过多,会导致查询性能下降,因为需要扫描更多的数据。
禁止对长字段进行排序
对例如VARCHAR(2000)这样的长字段进行ORDER BY、DISTINCT、GROUP BY、UNION之类的操作,会引发排序,有性能隐患。
6. Oracle审核插件改造及规则新增【企业版】
本期平台完成了对Oracle 审核插件的重构,使得SQLE对Oracle的SQL审核支持度更高,目前平台已支持83条Oracle审核规则。
三、完整的release信息
Release Notes
特性:
- [#1413] 新增 SQL 影响行数提示【企业版】;
- [#1432] 新增一批 MySQL 审核规则;
- [#1450] 新增智能扫描:MySQL processlist 审核。
优化:
- [#1411] 每条审核结果对应的审核建议细化,可查看对应建议的说明;
- [#1414] 审核结果列表展示优化;
- [#1427] 审核结果突出规则程度及数量;
- [#1412] 部分页面进行优化;
- [#1452] 创建工单页面展示使用的规则模板;
- [#1451] 调整工单描述的长度限制;
- [#1446] PG、oracle插件支持影响行数提示【企业版】;
- [#1412] 界面优化;
缺陷修复:
- [#1474] 修复创建新用户时会丢失已有用户的权限问题。