为什么我们需要一个 SQL 数据库审核平台

有关SQL

共 2563字,需浏览 6分钟

 ·

2021-01-19 00:07

点击蓝色“有关SQL”关注我哟

加个“星标”,天天与10000人一起快乐成长

图 | Lenis


2018年6月4日,链家 40岁程序员删库,公司斥资 18万恢复系统;

2020年2月24日,微盟程序员删库跑路,次日股价下跌 21.5亿人民币;

这些安全事故,暴露出大部分公司的隐患,缺少一个完善的数据库审核平台。数据库所有的操作,都应该有其审核规则,来确保不会造成灾难性的事情发生。

比如删库,一旦审核平台接到 Drop Database 的命令,就立马出发邮件到主管,申请批复,并暂时性停止执行,直到收到回复批准。

本文探索数据库审核平台的功能和实现。参考书目还是《数据库高效优化:架构、规范与SQL优化》

再举个例子,来说明下审核平台提供的功能。

比如,有 CRM 用户反映,平时 1,2秒就能打开的客户利润报表,现在需要 20 秒了。经过前端组的排查,确定是数据库的 SQL 返回结果慢了,请求 DBA 调优。

DBA 于是在审核平台,建了这么条规则:抓取运行时间超过 20 秒的所有 SQL 和存储过程,包括详细的 SQL 文本,索引使用和执行计划。

等待一段时间,平台就会把这些超长的 SQL 抓取出来,DBA 筛选下,就能定位到问题。

数据库审核平台的功能,到此就很清晰了,提出问题,设定规则,抓取问题SQL.


有同学会疑惑,这不就是问题排查嘛,造一个平台来解决,是不是大材小用?用短小精悍的脚本,不香嘛?

当然不是!我用 3 个节拍说服你

SQL开发的苦恼

SQL 开发小哥哥和小姐姐,平时被业务开发掏空。考勤,OA,HR,生产制造系统,ERP,进销存,仓储等 MIS 系统,通常三四条线,同时开工,占据绝大部分时间与精力。

忙起来,上午写的SQL,下午都能忘记逻辑。好不容易闲下来,除了开黑,看剧,社交,解解乏,根本没有时间再投入系统学数据库。

长期以往,遇到某张大表,SQL性能直线下降时,他们将束手无策。当靠经验,加索引,改写SQL均无效时,他们只能求助于DBA。

DBA的无奈

业务越丰富,头疼的当然不止开发,还有DBA. 成熟的企业,往往使用四,五种不同架构的数据库,十多套不同厂商的商业数据库。比如Oracle, SQL Server, DB2,MongoDB, ElasticSearch 等等。

安装,调试,建库建表建索引,建高可用集群,这些琐事,已经让 DBA 应接不暇。据我所知,传统行业还不配备专职 DBA,他们往往兼顾一些报表开发,ETL设计和建模。

于是,他们的命运,也就剩下疲于奔命,现场救火。此时与开发并无不同,没有紧急的工单,有问题的SQL调优,就被安排到了猴年马月。

上帝欲让人疯狂,先使人疯忙。

数据增值小分队

近十年,云计算不断介入后端。越来越多的机械性管理工作,被云统一筹划和部署。使得更多的精力与时间可以投入数据资产的管理,比如数据治理,数据质量和数据安全。

云之前,DBA 团队面临的情况:出了系统性能故障, DBA 的锅;出了数据库连接超时,DBA的锅;甚至数据质量问题,都是DBA的锅。但是一旦业务猛增的时候呢,嗯,各种领奖,嘉奖,都是前端业务系统的。

当 DBA 团队不能成为资产时,就会沦为成本。成本,是要被剔除的。因此,数据增值分队应运而生!

让上帝的归上帝,凯撒的归凯撒

SQL 开发会渐渐与前端框架融合,探索和保障业务系统顺利展开。DBA 分队,提供信息架构的基础建设,保障存储的安全,计算的稳定。在企业上云或数据库自治后,让大量基础 DBA 人员转型到数据增值团队来,负责数据治理,数据分析和数据安全等领域。

以上三点,就是我们需要数据库审核平台的理由了, 它帮数据团队,把服务做到量化,可视化、规模化和利润化。

数据库审核平台实践

那么,我们怎么做一个数据库审核平台呢?

购买软件,还是自研?购买的软件能帮我们解决所有的问题吗,这些数据带来的问题,有通用的模式,可以用统一模型来解决吗?

回答这个问题前,让我们先取个经,看下别人的成果。

  • 一梯队,BAT等互联网一线大厂。它们的方案,完全自研SQL引擎。实现 SQL 执行成本分析,自动审核,访问分流等。

  • 与大厂提前自动审核不同,大多数没有自研SQL引擎能力的中厂,选择半自动方式,做到事后审核。方法是收集数据库各项指标数据,引入人工判断,做好审核。

  • 针对完全没有研发能力的小厂,那么只能依靠购买商用的软件产品,再辅以人工处理。缺点就太明显,价格高,而且扩展性不高。

普通的团队怎么办呢,保二争一。自研适合大部分团队。

用 2 张图来表达,第一张是架构图,第二张是操作流程图:



平时开发中,经常遇到这些异常:

  • 上一秒运行正常的SQL,这一秒抛出了日志文件空间不足,执行失败
  • 平常运行秒出的SQL,今天偶然特别慢,就像人睡觉睡的好好的,突然抽了一两下,原因未知
  • 平静的出奇的某天下午,突然有同事大叫一声,谁XX把我的报表进程给杀了
  • 一天中的某段时间,数据库就像僵住了一样,无论运行什么都很慢
  • 系统中总有几张表,涉及到他们的查询,就非常慢
  • 每天都要手工清理一些表、索引或视图等数据库对象,没有时间和精力投入数据建模,数据治理

这些常见问题,归纳为两类:

  • 数据库对象
  • SQL 审核

也就是图中的 SQL 管理和 DB Object 管理。数据库审核平台主要做这两类。

回顾开头的原理图,数据团队要做的事情,无非就是:

  • 定义问题
  • 规则设计
  • 编码实现

如果大家有兴趣,可以参考宜信团队开源的 CreditEaseDBA Themis 数据库审核平台,在此基础上,加入自研的功能。他们的产品地址是:

https://github.com/CreditEaseDBA/Themis

再次申明,本文灵感来自《数据库高效优化:架构、规范与SQL优化》,摘录部分观点和示意图*。



--完--





往期精彩:


本号精华合集(三)

如何写好 5000 行的 SQL 代码

如何提高阅读 SQL 源代码的快感

我在面试数据库工程师候选人时,常问的一些题

零基础 SQL 数据库小白,从入门到精通的学习路线与书单










浏览 69
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报