请点击上方“民生运维人” 添加订阅!
01
背景
近几年,随着业务的增长、数字化转型加速、互联网金融业务快速发展和迭代,我行各系统数据库的数据量和并发量也在急剧增长。通过分析过去几年我行数据库的生产事件报告,发现SQL性能和对象可用性相关问题占到了相当的比例,在这样的背景下,我行决定引入SQL自动审核机制。
SQL审核的目标,是将SQL质量管理和优化的节点前移,由“部署生产->发现问题->SQL优化”变为“SQL评审->发现问题->SQL优化->部署生产”,通过在应用版本变更流程中增加SQL审核环节,引导开发人员形成SQL审核的意识,关注SQL性能和SQL书写规范,提前发现可能存在的隐患,进行修复,进而提升系统的健壮性和稳定性。通过审核工具的使用,有效地避免了以往人工方式低效、覆盖率低、依赖评审人技能水平等问题。
02
SQL审核的维度
SQL审核,就好比我们在野外捕鱼,首先要知道在哪里捕鱼产出比较高,可能捕到什么类型的鱼。通过梳理SQL审核的维度,有助于我们总结业务场景,防止遗漏。审核维度可按SQL来源、审核效果、审核对象三个方面进行分类。
按SQL来源分类:
按审核效果分类:
按审核对象分类:
03
SQL审核规则
明确了捕鱼的地点,还得有适合工具,不然一网下去,鱼都漏出去了,也是不行的。SQL审核规则的有效性和覆盖面,直接决定了SQL审核的效果。以下将从规则的来源、级别、分类、模板几方面进行说明。
规则来源:审核规则的设计,主要来源于业内通用规范、我行数据库SQL开发规范、以往发生的事件报告总结以及数据库专家多年的运维经验,通过对这些规范和案例进行总结,设计触发条件和优化方案。
规则级别:根据对数据库性能和对象可用性的影响程度,可将规则分为“提示”、“警告”、“严重”三种级别。“提示”类一般为建议型,“警告”和“严重”级别是需要重点关注的,尤其“严重”类型,如无特殊情况,都是不可以通过审核的。
规则分类:我行审核规则支持DB2、Oracle、MySQL三种数据库类型,按照审核关注点的不同,可分为性能问题、开发规范、数据丢失风险、对象失效或错误语句几方面。
DB2主要规则如下图所示:
针对每个审核规则,都需要有相应的说明信息,以DB2其中一个规则举例说明:
规则模板:按照对接系统的不同,可将多个规则组合成不同的规则模板,在模板中对规则进行设置,以适应不同的业务需求,比如对接DevOps开发流程,需要审核所有规则,而对接运维视点则只需要审核书写规范和性能类规则即可。
04
SQL审核流程
有了捕鱼的地点和工具,下一步就是确定捕鱼的流程了,这期间需要各个岗位紧密配合共同努力才行。
首先确定SQL审核介入点,通过对我行应用版本发布流程的梳理,通常的开发流程为开发环境->UAT环境->版本环境,而每次生产版本更新前,都会在版本环境中进行部署验证,因此选择在发布版本环境前介入SQL审核。
然后确定审核人,按应用系统级别不同,A类系统由DBA负责审核,B类系统由应用运维负责审核、DBA辅助支持,以便达到人员配置和审核效果的平衡。
最后演示SQL审核的机制,示意图如下所示:
1) 开发人员申请发布版本环境,DevOps收集变更SQL和应用程序里的差异SQL,连同数据库信息一起发送给SQL审核服务API。
2) SQL审核服务API接受到请求后,连接CMDB,复核所获得的数据库信息是否正确,同时获得所属应用系统相关信息,在后台自动创建审核工单,此时可以在SQL审核前端页面查看到此审核单,状态为“待审核”。
3) SQL审核服务API将审核单号、数据库信息和SQL一并发送给SQL审核引擎。
4) SQL审核引擎接受到请求后,连接被审核数据库,按预定规则进行匹配,审核后的数据异步回传给SQL审核服务API。
5) SQL审核服务API更新审核单状态为“已完成”,此时可从SQL审核前端页面查看该次审核详情,同时会将审核结果及审核报告反馈给DevOps。DevOps根据审核结果进行后续操作的流程控制。
通过以上几个部分的说明,SQL审核的要点就介绍完了,接下来描述审核工具所具备的功能。
05
审核工具功能
作为数据库统一管理平台的模块之一,SQL审核工具与数据库统一管理平台其他模块紧密结合,可实现如下功能:
SQL 语句审核:新建或编辑SQL语句审核,手工录入或导入SQL,对SQL进行语法分析、执行计划审核,自动获取审核结果,评审人可对SQL审核结果进行批注。
手工添加SQL审核页面如下图所示:
审核结果展示:展示数据库连接信息、SQL明细、SQL执行计划、SQL所含对象详情、触发规则、触发次数等。
审核结果部分信息如下图所示:
审核报告:可导出HTML形式的审核报告,内容保护包含结果展示的大部分信息。
增量SQL审核:结合数据库管理平台,获取重要系统每日增量TOP SQL,进行汇总合并后,对SQL进行审核,获得审核报告,并邮件给相关负责人,以便其了解数据库近期SQL运行情况。
数据统计:对审核数据按不同维度进行统计,比如获得前10个触发次数最多的规则、前10个问题最多的数据库、每日审核次数等,这些数据的统计,有助于了解审核质量,进而推动运维人员去优化问题较多的系统。
6. 结束语
以上是对SQL审核工具的介绍,目前审核工具正在我行逐步推广,A类系统已初见成效。部分工作还在持续完善阶段。相信随着系统和流程的优化,自动化程度的提高,加上开发和运维同事的支持,SQL审核工具能够发挥预期的效果,为数据库的稳定运行添砖加瓦。
李宁宁
Oracle OCM及MySQL OCP,有多年数据库运维经验,现任职于民生银行信息科技部系统管理中心,主要负责SQL审核推广及MySQL运维相关工作。
史国畅
十多年数据库行业经验,先后就职于百度、甲骨文等公司。现任职于民生银行信息科技部系统管理中心,主要负责Oracle、巨杉等产品运维相关工作。
李腾
民生银行信息科技部DBA,主要负责KAFKA相关运维工作。
编辑:民生运维文化建设小组