【翻译转载】What is a Self-Driving Database Management System

What is a Self-Driving Database Management System?

cs.cmu.edu/~pavlo/blog/2018/04/what-is-a-self-driving-database-management-system.html#footnote-cidr

概述

一些组织和个人错误地将他们的系统标记为“自动驾驶”。真正的自动驾驶数据库管理系统(DBMS)会自动

(1)决定使用什么样(what) actions 来优化自己

(2)决定何时(when)部署这些行动

(3)从这些actions中学习(强化学习?)——所有这些都无需任何人为干预。

自适应数据库 [Self-Adaptive Databases] (1970-1990s)

自 1970 年代开始,使用 DBMS 来减轻应用程序开发人员的数据管理负担是关系模型和声明式编程语言(例如,SQL)的最初卖点之一。采用这种方法,开发人员只需编写一个查询,指定他们想要访问的数据。然后由 DBMS 找到执行该查询的最有效方法;开发人员不需要担心使用什么算法,如何存储和检索数据,或如何安全地交错更新数据的操作。DBMS 最了解数据库及其访问方式,因此始终处于做出这些决策的最佳位置。

同时,一些组织希望 DBMS 能够为其应用程序选择一个整体策略,以处理管理和优化其数据库的所有方面。这些在 1970 年代被称为自适应系统。这些早期系统的设计思想和现代的tools的工作方式基本一样:(1)系统收集有关应用程序如何访问数据的指标,然后(2)它根据代价模型来搜索要进行哪些更改以提高性能。

早期的自适应DBMS侧重于物理数据库设计,特别是索引选择。事实上,Andy的导师的导师在1976年写了第一篇关于自动索引选择的论文。党史研究此问题的其他公司包括 IBM、Berkeley 和 CMU。这种趋势一直持续到 1980 年代(IBM 的 System R 的 DBDSGN 项目)。

除了索引选择之外,另一个被广泛研究的数据库设计问题是数据分区。在 1990 年代,随着分布式/并行 DBMS 的兴起,对自动数据库分区和数据放置方法的需求变得更加流行。关于这个主题的主要论文来自(1) DeWitt’s group at Wisconsin and (2) Toronto/IBM.

自调优数据库 [Self-Tuning Databases] (1990s-2000s)

1990 年代末和 2000 年代是自动 DBMS 的“黄金时代”。这是对所谓的“自调优”(也称为“自动调优”)数据库系统的第二波研究。最前沿的是 Microsoft Research 的 AutoAdmin 项目的开创性工作。他们构建了advisor tools来针对workloads帮助DBA选择最优的indexes、物化视图以及分区schemes。AutoAdmin 的主要贡献是开发what-if API(能够在假设条件下计算cost)。这样,优化工具就可以为潜在的设计决策(例如,要添加的索引)创建虚拟catalog entries,然后使用查询优化器的成本模型来确定该决策的好坏。换言之,你可以告诉optimizer数据库具有一个索引,即使实际上没有这个索引。然后查看optimizer是否为每个查询选择了该索引,以确定添加该索引是否是一个好主意。这允许tools使用现有 DBMS 的代价模型估算,而不必创建第二个外部(可能因此不够准确)代价模型来做出设计决策。其他主要的数据库供应商也有类似的自调优物理设计项目(例如,IBM 的 DB2 Designer),但 Microsoft 是最多产的。

2000 年代还开始了对自动旋钮配置(automating knob configuration)的研究。这些旋钮允许 DBA 控制 DBMS 运行时行为的各个方面。例如可以借此来设置系统给data caching 分配多大内存,以及txn log buffer的内存大小。与物理设计工具不同,配置工具不能使用查询优化器的内置成本模型。这是因为这些模型会生成执行特定查询的工作量的估计值,并旨在比较固定执行环境中的替代查询执行策略。

所有主要的 DBMS 供应商都有自己专有的旋钮调整工具,这些工具支持的自动化程度各不相同。在 2000 年代初期,IBM 发布了 DB2 Performance Wizard,它向 DBA 询问有关其应用程序的问题(例如,它是 OLTP 还是 OLAP),然后根据他们的回答提供旋钮设置。IBM 后来发布了一个带有自调优内存管理器的 DB2 版本,该管理器使用启发式方法来确定如何将 DBMS 的内存分配给其内部组件。Oracle 开发了一个类似的系统来识别由于配置错误而导致的瓶颈。更高版本的 Oracle 包括一个 SQL 分析器工具,用于估计配置修改的影响。此方法也已用于 Microsoft SQL Server。

使用上述所有工具仍然是一个手动过程:DBA 提供示例工作负载,然后该工具建议一个或多个操作以提高性能。仍然由 DBA 来决定这些建议是否正确以及何时部署它们。IBM 认识到需要人类专家来做出这些最终决策是有问题的,因此他们发起了一项为 DB2 构建自主组件的计划。其中最著名的是 LEarning Optimizer (LEO) 和自适应直方图集 (SASH)。基本思想很简单:DBMS 的成本模型在选择查询计划时会根据它收集的统计信息进行估算。然后,当系统执行查询时,它会检查这些估计值是否与实际数据匹配。如果没有,则系统具有反馈循环机制,可为成本模型提供校正。这似乎正是人们在系统中想要的,但我还没有遇到任何 DB2 DBA 说它像宣传的那样工作。至少有三个 DBA 告诉我,每当他们第一次部署新的 DB2 数据库 [3] 时,他们总是关闭此功能。

在消除人类依赖方面,对物理设计的某些方面也进行了探索。最值得一提的是 Stratos Ideros 的出色**database cracking**工作。

云数据库 [Cloud Databases] (early 2010s)

随着云计算的兴起,自治系统的新篇章随之而来。由于其规模和复杂性,在此类云平台中更需要自动化。所有的云数据库提供商都使用自定义工具来控制操作员级别的部署(例如,租户放置)。Microsoft似乎再次引领了这一领域的研究。其 Azure 服务根据内部遥测数据对 DBMS 容器的资源利用率进行建模,并自动调整分配以满足 QoS 和预算限制。我还没有看到或听说过其他云数据库供应商提供过任何具有相同复杂程度的产品。

还有一些controllers来供应用程序在云中执行黑盒配置。其他人则采用了与自动驾驶汽车相同的**receding-horizon controller model** ,但它们只对集群中使用的机器数量进行修改。

云上是之前研究没有考虑过的研究场景:由于计算和存储资源现在是“无限的”,因此从理论上讲,DBMS几乎可以立即向上/向下扩展和向内/向外扩展。与此形成鲜明对比的是,传统的本地部署可能需要数周甚至数月的时间。我认为未来分布式DBMS设计的主导趋势将是shared-disk architectures.将计算节点与存储分离允许有趣的设计选择,这在无共享架构中并不容易完成。亚马逊、谷歌、Microsoft 和 Snowflake 将成为以新的和有趣的方式 [4] 推动云 DBMS 模型的领导者。云提供商将处于这一领域的最前沿,因为他们控制着整个stack。这意味着他们可以将特定于DBMS的逻辑向上推送到网络层,并在存储层中向下推送,而供应商只是在其平台内部运行是无法做到的。例如,Amazon Aurora 将有关事务写入的逻辑嵌入到 EBS 存储层中。

自驱动数据库 [Self-Driving Databases] (late 2010s)

自动驾驶汽车是一个热门领域。人们开始将“自动驾驶”这个词用于其他事物上。我也是在数据库领域这么做的人之一。然而,尽管对于自动驾驶汽车的定义已经确立,但对于数据库管理系统(DBMS)来说却没有相应的定义。

在我看来,DBMS要被认为是完全自动驾驶的,必须支持以下三个方面:

  • 能够自动选择actions以改善某些目标函数(如吞吐量、延迟、成本)。这种选择还包括使用多少资源来执行一个action。
  • 能够自动决定何时执行一个Action。
  • 能够从其action中自动学习并完善其决策过程。

Action是对DBMS的三个类别之一的更改:(1)对数据库的物理设计的更改(例如,增加/删除索引),(2)对DBMS的旋钮配置的更改(例如,为DBMS的日志缓冲区分配更多/更少内存),或(3)对DBMS的物理资源的更改(例如,在集群中增加/移除一个节点)。选择如何应用action的问题是action选择过程的一部分。例如,如果资源有限,DBMS 可以选择使用一个线程生成新索引,或者如果需要更快地生成该索引,则可以选择使用四个线程。

你现在应该明白为什么我会从自治数据库研究的历史开始谈起。除了少数例外,所有之前的工作都集中在解决第一个问题。有一些工具试图解决第二个问题的一部分,据我所知,没有人解决了最后一个问题。但这些正是使自驱动DBMS困难的原因。DBMS必须知道何时when部署一个action以及该action是否有帮助。这不仅仅是确定周日早上是需求低的时候,因此系统可以更积极地进行自我优化。系统必须了解工作负载将来的样子,并做出相应的计划。如果没有这种预测,DBMS就相当于一辆自动驾驶汽车,只能看到它后面的道路。汽车可以看到过去碾过的所有孩子,但它无法预测未来可能出现的孩子,也无法在前方的道路上避开他们。

这些预测之所以成为一个具有挑战性的问题,是因为环境总是在变化。硬件可以根据操作进行更改。工作负载可以根据一天中的时间、一周中的某一天或一年中的月份而变化。查询的资源使用情况可能会根据物理数据库设计而变化。**Lin Ma 在SIGMOD’18 paper**介绍了如何在自动驾驶 DBMS 中独立于这些问题预测工作负载。他的新预测框架称为 QueryBot 5000,它根据查询的arrival rates(而不是物理资源或逻辑 SQL 功能)对查询进行聚类。然后,它使用RNN、线性回归和核回归来生成不同范围(例如,10 分钟、1 小时、1 天)和不同间隔(例如,每分钟、每 10 分钟)的预测。

我们的下一步是构建强化学习 (RL) 模型,该模型可以使用 QueryBot 5000 的预测来选择有用的操作。研究的难题是如何观察一个action的好坏。同样,环境总是在变化,因此我们必须弄清楚如何将这种变化与我们的观察隔离开来。

Oracle Self-Driving Database

Oracle在2017年9月宣布他们拥有世界上第一个自驱动DBMS,oracle似乎使用了他们在过去二十年中开发的现有部署和调优工具,换句话说,他们正在使用现有的云DBMS和自调优工具托管数据库;最终用户不必手动运行这些工具。例如,它们通过横向扩展 DBMS 来自动进行预配。当系统无法满足 SLA 时,就会触发此操作,因此可能是基于规则和启发式方法(即“如果性能低于某个阈值,则添加新节点”)。

Oracle 在 2018 年的“自动驾驶”DBMS 类似于 IBM 在 2008 年对 DB2 的概念验证。与我认为 Oracle 系统的工作方式类似,IBM 的系统在外部控制器和监视器中使用了 DB2 的现有工具,每当超过资源阈值(例如,死锁数量)时,这些工具就会触发更改。这个原型仍然需要一个人类DBA来选择调优优化,并偶尔重新启动DBMS。因此,Oracle 的 DBMS 在这方面更加复杂,但这两个系统仍然只在问题发生后做出反应,因为它们缺乏预测。

Oracle 吹嘘他们的自治数据仓库能够执行自动查询调优和优化。这是 Oracle 新增的自适应查询优化功能。其工作原理的要点是,如果 DBMS 注意到实际数据与其估计值不匹配,则在执行期间会生成新的查询计划。这种方法是 (1) IBM 的 LEO 的组合,其中 DBMS 可以在查询执行期间使用观察到的统计信息更新优化器,以及 (2) 1970 年代的 INGRES’ adaptive query processing 自适应查询处理技术。Oracle 并不是唯一支持此功能的系统;Microsoft 将其添加到 SQL Server 2017。

我还怀疑 Oracle 的autonomous DBMS可以自动为慢查询构建索引,因为你无法手动创建索引。同样,这可能是使用 Oracle 现有的数据库设计工具,而不是新的 ML 技术。使用ML和/或RL进行查询优化是Andy的研究小组正在研究的事情。Microsoft研究和伯克利都有单独的项目来研究这个问题。

有鉴于此,我认为甲骨文所谓的“自主数据仓库”并不是一个完整的自动驾驶DBMS。他只是一个reactionary DBMS。也就是说,它只关注现在正在发生的事情或过去发生的事情,而无法进行长期规划。Oracle 可能会使用预测模型为整个数据中心配置资源,但它不会根据特定应用程序的预期工作负载模式和变化来调整数据库。

Is a True Self-Driving Databases Even Possible?

这就提出了一个问题,即是否有可能拥有一个完全自主的 DBMS,该 DBMS 能够实现与人工手动维护的 DBMS 一样好或更好的性能,以应对所有可能的工作负载。我认为答案是“是”,就像自动驾驶汽车足以满足日常驾驶需求,但不足以应对更复杂的驾驶场景(例如拉力赛)一样,我认为自动驾驶DBMS对于大多数应用场景来说已经足够了。对于最复杂的情况,您可能仍然需要一个人。但是,自动驾驶DBMS将使人类能够部署一些原本不可能实现的优化。可以把它想象成数据库的**TAS。**

还有一个问题,如果像Oracle的自主DBMS这样的系统足够快,可以在不预测的情况下对任何变化做出反应,那么这是否可以被视为与自动驾驶DBMS相同?也就是说,如果系统能够对不断变化的工作负载做出足够快的反应,那么它就不需要具备我所说的自动驾驶所必需的预测预测功能。从人类的角度来看,它看起来好像能够自己处理所有事情,就好像它有预测一样。对于 Oracle 在其第一个版本中针对的优化类型,这可能是真的。但是,预测最重要的地方,以及真正的自动驾驶DBMS的优势在于容量规划(capacity planning)。

对于自动驾驶 DBMS 来说,“无服务器”部署的出现也是一个有趣的话题。

Other Academic Projects

除了主要供应商之外,还有一些其他学术团体正在积极研究自主DBMS。

  • Deep Tune DB: 探索将 RL 用于物理设计。有一个用于索引选择的概念验证。 之前还有一个项目叫做 OctopusDB,它支持混合存储模型,对CMU NoisePage的存储管理器的设计产生了影响。
  • CrimsonDB : 这也是哈佛大学Stratos Ideros团队的一个较新项目。这是他关于**self-designing systems**的更大主题的一部分。主要思想是DBMS可以根据工作负载和硬件的变化来优化其物理数据结构。
  • DBSeer: 这是来自Michigan Barzan Mozafari 团队的外部框架,它通过将 DBMS 性能时间序列数据中系统运行缓慢的区域与行为正常的区域进行比较来帮助 DBA 诊断问题。这些技术可用于估算self-driving planner中action的收益/成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis 常用条件语句,大于小于、if、for、模糊搜索、case when、choose

大于小于 方法1&#xff1a; > 大于 &#xff0c; < 小于 <if test"startTime ! null ">and a.create_time > #{startTime} </if> <if test"endTime ! null ">and a.create_time < #{endTime} </if> 方法2(建议写这…

爬虫的基本原理

基本原理 可以把网页与网页之间的链接关系比作节点中的连线&#xff0c;爬虫可以根据网页中的关系获取后续的网页&#xff0c;当整个网站涉及的页面全部被爬虫访问到后&#xff0c;网站的数据就被访问下来了。 1.爬虫概述 简单点讲&#xff0c;爬虫就是获取网页并提取和保存信…

PLECS如何下载第三方库并导入MOSFET 的xml文件,xml库路径添加方法及相关问题

1. 首先xml库的下载&#xff0c;PLECS提供了一个跳转的链接。 https://www.plexim.com/download/thermal_models 2. 下载一个库&#xff08;以最后一个Wolfspeed为例&#xff0c;属于CREE的SiC MOSFET&#xff09; 下载这个就行&#xff0c;都包含了。不信自己可以试试再下载…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-1 表单

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>表单</title> </head><body> <!--<form action"URL地址" method"提交方式" name"表单名称" /*编码“多部…

升级cmake 版本方法

ubuntu18.04更新cmake版本_cmake 已经是最新版 (3.10.2-1ubuntu2.18.04.2)-CSDN博客

【QML COOK】- 008-自定义属性

前面介绍了用C定义QML类型&#xff0c;通常在使用Qt Quick开发项目时&#xff0c;C定义后端数据类型&#xff0c;前端则完全使用QML实现。而QML类型或Qt Quick中的类型时不免需要为对象增加一些属性&#xff0c;本篇就来介绍如何自定义属性。 1. 创建项目&#xff0c;并编辑Ma…

NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver

安装显卡驱动 https://fakerth.blog.csdn.net/article/details/134659236 NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver 电脑打开分辨率直接变了&#xff0c;运行nvidia-smi报错&#xff0c;当时我就在爆发的边缘了&#xff0c;想着大好…

C语言数据结构(1)复杂度(大o阶)

欢迎来到博主的专栏——C语言与数据结构 博主ID——代码小豪 文章目录 如何判断代码的好坏时间复杂度什么是时间复杂度如何计算时间复杂度 空间复杂度 如何判断代码的好坏 实现相同作用的不同代码&#xff0c;如何分辨这些代码的优劣之处呢&#xff1f; 有人说了&#xff0c…

算法:A*算法最小实例

A*算法主要作用是寻找两个节点之间的最短路径 首先&#xff0c;需要定义一个表示地图的二维数组&#xff0c;其中0表示可通过的空地&#xff0c;1表示障碍物&#xff1a; const map [[0, 0, 0, 0, 0],[0, 1, 1, 0, 0],[0, 0, 0, 0, 0],[0, 1, 0, 1, 0],[0, 0, 0, 0, 0]];接着…

原子类-入门介绍和分类说明、基本类型原子类

Atomic翻译成中文是原子的意思。在化学上,我们知道原子是构成一般物质的最小单位,在化学 反应中是不可分割的。在我们这里Atomic是指一个操作是不可中断的。即使是在多个线程一起执 行的时候,一个操作一旦开始,就不会被其他线程干扰。 基本类型原子类 AtomicInteger:整…

在illustrator中按大小尺寸选择物体 <脚本 018>

在Illustrator中我们可以依据对象的属性 如:填充颜色、描边颜色或描边宽度来选择相同属性的对象,但是Illustrator中没有根据不同大小尺寸来选择对象的功能,下面介绍的就是根据大小尺寸选择对象的脚本。 1、下面是当前画板中的所有对象,我们想把一些在尺寸小一些的方形物体…

数据治理工程师 CDGA数据建模和设计

1. 以下选项不属于数据建模和设计治理中质量管理内容的是&#xff08;D &#xff09; A 开发数据建模和设计标准 B 评审数据模型以及数据库设计质量 C 管理数据模型版本与集成 D 评估数据模型运行效率 2. 关于实体的别名&#xff0c;以下对应关系不正确的是&#xff08;B &…

金融帝国实验室(Capitalism Lab)V10版本游戏平衡性优化与改进

即将推出的V10版本中的各种游戏平衡性优化与改进&#xff1a; ————————————— 一、当玩家被提议收购一家即将破产的公司时&#xff0c;显示商业秘密。 当一家公司濒临破产&#xff0c;玩家被提议收购该公司时&#xff0c;如果玩家有兴趣评估该公司&#xff0c;则无…

datavrap-各种各样的条形图(含详细操作步骤)

静态条形图&#xff1a;正确设置数据即可&#xff0c;导出的图形不会随着时间变化 最普通的静态条形图 黑色系风格的静态条形图 动态条形图&#xff1a;导出的图形会随着时间变化 普通的动态条形图 带数字滚动效果的动态条形图 简单的Top排行榜动态条形图 格式更丰富的Top排行榜…

联盛德-安全物联网芯片w800

联盛德-安全物联网芯片w800 前言一、w800简介&#xff1f;芯片外观 总结 前言 本文介绍w800的基本信息&#xff0c;详细规格&#xff0c;后续有时间会介绍如何适配openharmony的过程。 一、w800简介&#xff1f; W800 芯片是一款安全 IoT Wi-Fi/蓝牙 双模 SoC 芯片。支持 2.…

系统设计面试

如何处理一个系统设计的面试题 系统设计面试是一个开放式的对话。他们希望你去主导这个对话 第一步&#xff1a;描述使用场景&#xff0c;约束和假设 把所有需要的东西聚集在一起&#xff0c;审视问题。不停的提问&#xff0c;以至于我们可以明确使用场景和约束。讨论假设。 …

B语言 :我心目中永远的两位神共同开发出来的语言

B是贝尔实验室大约在1969年由Ken Thompson和Dennis Ritchie开发的一种编程语言。 B源于BCPL&#xff0c;它的名字可能是BCPL的缩写。汤普森的同事丹尼斯里奇推测&#xff0c;这个名字可能是基于Bon&#xff0c;这是汤普森为Multics设计的一种更早但与之无关的编程语言。[注1] …

lombok 相关注解

话不多说&#xff0c;lombok相关的注解的使用&#xff0c;需要添加入如下依赖&#xff1a; <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version> <!-- Spring Boot 项…

Vue-Router 路径匹配与重定向

一、效果与描述 通过设置路由匹配同时设置重定向&#xff0c;让输错的网址重定向到指定页面&#xff0c;例如在网页输入网页地址把路径进行任意修改&#xff0c;重定向到登录页面。 二、Vue-Router代码 import { createRouter, createWebHashHistory } from vue-routerimport …

代码随想录算法训练营第一天 | 704-二分法查找、27. 移除元素

数组基础 1、数组定义&#xff1a;数组是存放在连续内存空间上的相同类型数据的集合。 特点&#xff1a; 数组下标都是从0开始的。数组内存空间的地址是连续的 2、数组的元素是不能删的&#xff0c;只能覆盖。 704. 二分查找 1、题目链接&#xff1a;. - 力扣&#xff08…