高品质的音视频能力是怎样的? | Qcon 全球软件开发大会·上海站邀请函 了解详情
写点什么

数据库内核杂谈 (十八) :自动驾驶的数据库系统

  • 2021-05-26
  • 本文字数:4097 字

    阅读完需:约 13 分钟

数据库内核杂谈(十八) :自动驾驶的数据库系统

本文是数据库内核系列文章之一。


这一期,内核杂谈我们跟风来聊一个最近很火的话题:自动驾驶。最近各大互联网公司,纷纷宣布,all in 自动驾驶,开始造车。等等,这不是数据库内核杂谈吗?是的,从这一期开始,内核杂谈介绍一个能自动驾驶的数据库管理系统:这是 CMU 数据库领域的教授 Andy Pavlo 的研究领域之一,self-driving database management。


项目的名称叫 NoisePage(网址https://noise.page/about/)。NoisePage 是一个从头开发的致力于自动管理的数据库系统。通过 machine learning 技术来调整,优化系统参数和对系统进行调优。目前支持的参数包括,但不限于,物理数据库设计如如何建立索引,materialized views,如何对数据进行 sharding;系统参数的调优,数据库 SQL 语句的调优,以及硬件扩容策略。学术研究主要负责构建系统来支持这些自动化驾驶型调优,并且,通过预测未来的查询语句 workloads,来提前做好规划,最终目的是构建一个尽量减少人为干预的数据库系统(额...这是想取代 DBA 的节奏啊)。


看了一下相关的学术论文,已经发表了好几篇了。而且,最近在 Professor Pavlo 搞的 Vaccination Database Talks 系列中他的 Phd 学生 Lin Ma 正好给了一个最新的 presentation(https://www.youtube.com/watch?v=YqW9Pq5488s&t=2047s),欢迎大家去学习一下。


这一期,一起来学习第一篇论文,Self-Driving Database Management Systems,发表于 Conference on Innovative Data Systems Research(CIDR) 2017。对整个自动驾驶数据库系统做了一个综述,并分享了当时获得的进展。

简介


数据库的诞生,SQL 语句的盛行,最初想解决的问题就是把数据存储,管理等复杂的逻辑隐藏起来,让程序员可以通过 SQL 这个 declarative language 来描述想要获得什么样的数据。但随着几十年数据库系统的发展,系统本身变得越来越复杂, 需要配置,优化的地方越来越多。因此也催生了一类专门的职业,DBA (Database Administrator)。DBA 的主要职责就是确保数据库系统可以很好地支持现有的业务逻辑需求 workloads,大到存储,节点配置,小到某个 GUC 的设定来优化 SQL 语句,都属于 DBA 的范畴(在我还在上大学那时,DBA 可是个热门职业,传说 Oracle 的 DBA 工资可高了)。而随着分布式数据库,云原生数据库的诞生,新的趋势却是返璞归真,尽量把数据库系统做得越来越傻瓜化,不需要复杂配置,就可以很好地运行业务逻辑。一是,系统越来越复杂,迭代越来越快,成为一个好的 DBA 越发困难;二是随着人工智能的进步,我们觉得机器可以通过算法来优化操作,做的比人类更好。人类是懒惰的,追求自动化,效率最大化是我们的本性。


当下,已经有很多相关研究在这一领域开展。但是,本文指出,之前的研究大部分都集中在某一个单点领域,比如如何更好地设计物理数据库,如何设计 index,如何设计存储格式,或者 partition scheme;其他的一些研究旨在给出最优化的 GUC 调整来提高 SQL 语句的运行效率。文中也指出了现有研究的一些缺陷。比如,大部分的优化管理都并不是原生于数据库系统中(外部构建);并且更多的是反应式地来提供优化,并不能主动去适应查询语句的变化;大部分的优化都是关注局部,而不能从全局角度来考虑最优。


而本文介绍的研究,是如何从宏观角度,支持自动管理整个数据库系统。并且提出了一种新的架构,即自动驾驶模块需要被构建在数据库系统内部。文中所用的系统是 Peloton,就是 CMU database group 自己构建的数据库系统,用于尝试和支持各种研究。

要使数据库自动驾驶,需要解决哪些问题


第一个挑战就是,如何预测未来的 workloads,即哪些 SQL 语句会被执行。如果能够准确预测这些语句,能解决什么问题? 试想一下,即便只是了解到这些 workloads 属于 online transaction processing (OLTP) 或是 online analytical processing (OLAP),数据库已经可以进行优化:如果 workloads 属于 OLTP,系统可以选择 row-store(行存)来优化写操作,反之,如果 workloads 属于 OLAP,系统可以选择 column-store(列存)来优化读取操作。如果各种 workloads 都有,一个可行的优化是部署两套系统,行存用来优化写操作,然后将数据同步到列存数据库中来支持读取操作。另一种优化方式就是部署 HTAP(hybrid transaction-analytical processing)数据库来同时处理读操作和写操作。


除了预测未来 workloads,还有什么信息可以帮助优化数据库配置?第二个能想到的就是这些语句的资源使用情况。如,需要多少 CPU,多少内存来执行 SQL 语句。如果能够准确地预测这些信息,数据库就可以提前做好准备,来确保性能不受影响。这就好比,DBA 通常会把数据库清理,或更新操作安排在业务需求量最小的时候,比如深夜。


在能够预测未来 workloads 和 resource utilization 的情况下,数据库系统可以支持哪些优化呢?本文给出了三个大类:


1)physical design(物理设计):比如添加或者删除 index,materialized view 来加速查询或者插入操作,选择 row store 或者 column store 来优化写操作或者读操作。


2)data design(数据存储):根据查询语句的需求,对数据进行冷热区分或者进行 sharding 操作。


3)runtime(运行时优化):比如针对 SQL 语句的 optimization,或者 knob 的 tuning,再或者,根据查询语句的容量大小来决定是否需要增加新的计算节点。



文中同时提到,非常重要的一点就是,自动优化的数据库系统必须支持动态地对配置进行更改,致使优化配置能够即时生效。试想,如果一个数据库系统,需要重启才能更新配置,那自动驾驶带来的优化就需要大打折扣了。


总结一下,本文认为,一款自动驾驶的数据库, 应该具备预测 workloads 和资源使用情况,提供多种优化操作,并且支持动态更新配置。

自动驾驶架构


要如何构建一个系统来实现上述提到的种种操作呢?文章介绍的架构基于 Peloton,CMU 数据库小组自主构建的系统。下图给出了具体架构图。



目前市场上的所有自动驾驶,都是人工智能驱动的。自动驾驶的数据库也不例外。而人工智能最重要的就是,数据。因此,整个架构都是围绕数据来打造的。结合架构图,一个部件一个部件来看。


第一个介绍的部件就是用来做数据收集的 workload monitor。Workload monitor 负责收集所有 workload 运行的相关信息,除了 SQL 语句之外,数据操作量,资源使用等,都会被记录。此外,还会定期收集数据库系统随时间流的硬件指标,比如 CPU,内存,IO 使用率等等。


收集了原始数据,第二个部件负责 workload classification(workload 分类)。文中使用的是 unsupervised learning(非监督型学习)来把具有类似属性(characteristic)的语句分到一起。机器学习的术语是 clustering,聚类。聚类的作用就是去重,只为相似的语句保留一个 model 即可,让预测更容易。文中使用的方法是 DBSCAN,是一个已经被验证过的聚类方法。


聚类的挑战在于,什么 feature 属性应该被考虑进去?这样的属性分成两类,语句的运行时 feature 和语句的 semantic logic。前者的好处在于,能够将类似的语句分类在一起,甚至不需要去理解这些 SQL 语句,但这样的 modeling 也会对数据库的任何更改变得敏感,任何物理上的改动都可能使得预测变得不准确。另一个问题就是,当类似的语句在不同的并发程度下运行,那运行时属性就可能完全不一样,这同样使得数据变得不准确。另一个方法就是从 SQL 语句的语义出发,比如物理执行计划,读取了哪些表,用到了哪些 index,等等。这些信息往往独立于数据库本身。文中并没有给出结论哪个更好,应该还处于探索中。我认为,应该一股脑全交给 ML model 来自己决定。以我粗浅的对与深度学习的理解,它要解决的就是能够减少 feature engineering,让 model 自己决定哪些 feature 更重要(欢迎指正)。


在得到了 workload cluster 聚类后,要做的就是预测这些 workload cluster 未来什么时候会再次出现。预测的作用在于能够帮助数据库系统更好地应对未来的 workloads,提前做好配置优化或者扩容等。文中使用的技术,是对于每个执行的语句,tag 预测后的 clusterID,然后通过收集这些 cluster 出现的时间,来预测未来再次出现的时间(对于部署在生产环境中的数据库,大部分的 workloads 应该是具备周期性的,比如定点的 auto script 等。因此,预测并不会特别困难)。文中提到了 RNN 以及 long short-term memory (LSTM) 长,短记忆模型能够更好地预测周期性和重复性的 pattern,也提及了用多个 RNN 来预测模型。


预测了未来 workloads 的模型,下一步就是实施优化来提前让数据库做好准备。文中介绍了管理模块,用来根据预测的模型做出优化决策并实施。第一个部件就是 action generator,负责搜索 action 可以用来优化性能,这里需要提到,优化函数就是减少语句运行的时间,提高性能。但文中同时提到,优化函数是可以扩展到 throughtput,资源消耗等等。那系统是如何做的呢?首先,系统存储了一系列可能的优化 action,并记录了它们对数据库的影响,相当于 step function。


万事俱备,只欠东风。有了 action 库,有了预测 workload 的模型,目前的数据库配置,就可以根据目标函数来产生 action plan 来逐渐逼近目标。文中使用的方法是 control theory, 控制理论来操作。文中提到了 receding-horizon control model (RHCM)模型,是被广泛应用在真.自动驾驶汽车中的模型。 RHCM 的工作原理,简单而言就是,在每个时间周期内,用模型预测可能出现的 workloads,然后在 action catalog 中搜索一系列的 action 来使得目标函数得到最小值(逼进优化目标)。但是,数据库只把这一系列的 action 中的第一个 apply 到数据库当中,等待数据库响应这个 action,然后到下一个周期,再重复上述操作。整个优化过程就可以被类比为一个对树状图的搜索过程,从根节点作为第一个 time epoch。作者也强调,为什么需要一个高性能,并且可以动态更新配置的数据库来支持自动驾驶。因为需要对更新过得数据库系统重新收集数据来判断加载的 action 是否产生了效果。

总结


读完整篇文章,给我最大的感受就是,一开始提到如何自动驾驶数据库系统,完全无头绪。但是作者通过把问题分解成各个步骤,大家是否也觉得,整个逻辑通顺。并且,会觉得,真的,好像这样一步一步去做,就可以实现。 我觉得这就是一流学者所做的,能把一个复杂的问题想清楚,抽丝剥茧,然后找出解决方案。


感谢阅读!下一期,我们接着学习第一个模块,workload forecasting。

2021-05-26 09:312218

评论 7 条评论

发布
用户头像
作者留言:2022年1月1日,祝大家新年快乐。不知不觉,数据库内核杂谈又陪伴大家一年(虽然。。还是不可避免地拖更了)。今年的new year resolution,希望创建一个群,和大家一起交流。加我微信 81211430(请备注数据库内核杂谈,谢谢),我会建群。期待和大家交流。
2022-01-01 12:31
回复
用户头像
老师您好,我是图书策划编辑,想要邀请您写书,不知道您有没有这个意向呢
2021-08-05 14:23
回复
啊啊,书是不敢当。。觉得自己没这个能力。就催更我就行啦。
2022-01-01 12:31
回复
用户头像
大佬您好!机缘巧合之下看到了您,接连看了几篇您的文章,虽然还是对数据库内核有些懵懵懂懂,但已经学到太多了!
2021-07-25 19:37
回复
用户头像
催更
2021-07-06 18:01
回复
收到。最近太忙了。
2021-07-07 00:35
回复
写的很棒哈哈哈哈,迫不及待等下一篇了
2021-07-09 17:21
回复
没有更多了
发现更多内容

线程通信

周杰伦本人

5月月更

Carina 全新版本 V0.10发布 :支持裸盘作为存储卷

BoCloud博云

开源 本地存储

gRPC三种客户端类型实践【Java版】

FunTester

得物技术消息中间件应用的常见问题与方案

得物技术

kafka 分布式 MQ 中间件 消息队列

web技术支持| Web 客户端实现录音、录像

anyRTC开发者

前端 Web 音视频 WebRTC 视频通话

vue 自从使用了组件,工作量减去了一半

CRMEB

案例分享|智慧广电的“宽带加速”之路,博睿数据来“私人定制”

博睿数据

数字化转型 博睿数据 智慧广电

博云:Kubernetes 近年影响最大版本发布,这几点值得关注

BoCloud博云

Kubetnetes

《2022微隔离技术与安全用例研究报告》重磅发布 | 附PDF全文下载

青藤云安全

盲盒系统开发盲盒源码搭建需要多长时间

WDL22119

2021年证券类APP更新迭代检测专题分析(上)发布

易观分析

金融 券商App

TiDB 6.0 新特性解读丨 Collation 规则

PingCAP

让客户实现 AI 算力“自由”,博云与趋动科技完成算力调度容器化验证

BoCloud博云

AI

直播预告|争夺存量用户关键战,助力企业构建完美标签体系

数栈DTinsight

大数据 数据中台

【国产】自动化运维ETL统一调度平台TASKCTL流程触发方式

TASKCTL

DevOps 分布式 数据仓库 ETL 自动化运维

投稿开奖丨云服务器ECS征文活动(2&3月)奖励公布

阿里云弹性计算

云服务器 征文投稿开奖 玩转ECS

记一次存储系统IOPS翻倍的性能优化

Vincent

性能优化 存储系统

如何真正将企业知识管理做出价值?

小炮

企业知识管理

MySQL__数据处理之查询

编程江湖

JAVA异常情况如何处理?

源字节1号

后端开发

告诉你使用预约小程序的9个理由

天天预约

小程序 SaaS 企业服务 预约工具

数据库内核杂谈(十八) :自动驾驶的数据库系统_大数据_顾仲贤_InfoQ精选文章