前言
在分布式数据库TiDB的使用过程中,一条未经严格审核的SQL语句可能引发严重的线上问题——不仅仅是查询变慢,甚至可能导致集群级故障,如热点Region激增、TiKV节点负载不均、PD调度延迟等。传统的SQL审核方式(如人工Review、静态规则检查)在TiDB环境下往往面临更大挑战:
- 测试环境与生产环境差异大:线下数据量小,无法模拟真实分布式场景下的执行计划
- TiDB特有优化器行为:相同的SQL在不同数据分布下可能产生完全不同的执行路径
- ORM框架生成的SQL难以管控:MyBatis/Hibernate等生成的SQL在TiDB中可能出现意料之外的性能问题
- 分布式事务与锁机制复杂:简单的SELECT也可能因锁等待导致集群级性能下降
那么,是否有一款能真正适配TiDB特性、覆盖SQL全生命周期的智能审核工具?DBdoctor for TiDB 给出了完美答案。
TiDB数据库SQL质量全生命周期管理
该方案围绕SQL的全生命周期展开,覆盖开发、测试和生产三个阶段。不仅有传统的SQL开发规范审核,还具备行业独有的基于外置COST优化器的性能审核,在开发和测试阶段即可精准评估SQL上线后的性能表现。接下来,我们将针对这三个阶段进行详细阐述。
一.开发阶段
最终导致数据库问题的这些SQL如果我们追溯到开发阶段,主要分为两类:
- 版本升级时候的数据库升级脚本,主要是一些DDL以及预置数据的SQL;
- 代码中SQL,包括源码拼接SQL,ORM框架等等。
针对以上两类问题,DBdoctor在开发阶段可提供以下解决方案:
IDE审核
编写代码时,在IDE中通过插件的形式集成DBdoctor的SQL审核能力,为SQL及DAO层的开发人员提供实时的SQL审核服务,帮助开发人员及时发现和解决SQL问题。
CICD审核
当提交SQL到代码仓库时,DBdoctor的SQL审核能力可以集成到CICD流水线中,自动检查本次提交的SQL代码,确保SQL代码符合既定的SQL开发规范。
代码仓审核
当提交SQL到代码仓库时,DBdoctor的SQL审核能力还可以直接对接代码仓的WebHook,当提交的代码中发生SQL变动时 ,代码仓可将变动对接至DBdoctor平台,对发生变动的SQL文件进行审核。自动检查本次提交的SQL代码,并将SQL审核结果以Comment的形式展示给用户。
针对mybatis xml mapper 文件的SQL审核,DBdoctor做了进一步增强。相比于业界已有产品,DBdoctor可以实现对mapper中SQL的各个字段类型的精准识别,并结合外置COST优化器,评估SQL未来上线后性能,并推荐出最优索引。
二.测试阶段
前面我们也提到了,编程语言是多种多样,编程语言中SQL的拼写方式更是五花八门,因此从源代码层面是很难将每种场景的SQL都获取完整。为了解决这一问题,在测试阶段DBdoctor借助eBPF技术从数据库内核中无损的采集到了全量SQL执行记录,并基于全量SQL执行记录进行SQL指纹维度的聚合,同时还对SQL指纹进行了版本划分,可针对新版本的增量SQL进行全量SQL审核,从而协助测试人员完成对该版本新增SQL的全量测试,确保问题SQL在测试阶段闭环解决,不流入线上。
三.生产阶段
针对生产环境的存量SQL,DBdoctor支持慢SQL审核以及库表元数据审核。
慢SQL审核
DBdoctor支持实时抓取慢SQL并进行SQL指纹维度的聚合,同时自动选取该指纹中最差的一条SQL进行审核,审核完成后系统会自动检测该SQL是否根据建议进行整改,对于按照建议进行整改的SQL,系统会自动判定为已修复,而对于没有按照建议进行整改的SQL会进行持续的晾晒以及告警通知,确保线上SQL问题闭环跟踪,不遗漏任何问题。
库表元数据审核
支持对存量的建表语句进行全量的SQL审核,确保存量建表语句符合既定的SQL开发规范。
此外运维人员还可借助生产审核中的工单流程,将问题SQL分配给指定人员处理并进行全流程跟踪,确保问题无遗漏。
总结
DBdoctor通过覆盖SQL全生命周期的审核方案,可以有效解决传统工具难以应对的行业难题,比如在开发阶段如何评估SQL上线后是否存在性能问题,提升代码质量并优化数据库性能。
DBdoctor是一款企业级数据库智能管理平台,深度融合【性能监控与诊断、SQL审核与治理、数据脱敏与防护】三大核心模块,提供从实时诊断分析到智能优化加固的全生命周期数据库解决方案。已适配商业/开源/国产/云等20余款国内外主流数据库。目前可免费下载使用,并提供永久免费版一键安装包,欢迎体验!私聊小助手可获赠商业版License!
DBdoctor免费下载地址:DBdoctor-数据库性能诊断