Autonomous DBMS的第一步就是能够建模并预测工作负载,以前的预测技术对查询的资源利用率进行建模。然而,当数据库的物理设计和硬件资源发生变化时,这些指标会发生变化,从而使以前的预测模型无用。
提出了QueryBot 5000的具有鲁棒性的预测框架,它允许DBMS根据历史数据预测未来查询的预期到达率。为了更好地支持高度动态的环境,本文的方法使用工作负载中查询的逻辑组合,而不是用于查询执行的物理资源的数量。提供了短期和长期的预测。本文还提出了一种基于聚类的技术来减少要维护的预测模型的总数。在三个数据库进行测试,在MySQL和PG的external controller上实现了本文的模型进行了测试(选择索引)。
两个原因关于为什么要再次努力开发self-driving dbms:
要完全autonomous,一个是可以预测未来负载变化做出相应的action,另外一个是能够在低峰期间自动进行action,不然高峰就出现争用了。
以前的工作已经研究了不同上下文中的数据库工作负载建模。
所有这些方法都存在缺陷,这使得它们不适合自治系统。
本文提出了一个简洁的self-driving的工作负载的预测方法。根据查询到达率来对查询进行建模,无缝处理不同负载模式和切换,构建模型来预测查询聚类的未来到达模式(类别),这样的预测是必要的,使自主DBMS的planner模块能够识别哪些优化actions可以提高系统的性能,并主动应用它们。与以前的预测方法相比,本文的方法的主要优点是用来训练的模型的数据独立于硬件和数据库设计。因此,如果DBMS的硬件或配置设置发生变化,则不需要重建模型。
为了评估预测模型,将该框架集成到 MySQL [1] 和 PostgreSQL [5] 中,并测量其建模和优化三个数据库应用程序的能力。结果表明,本文的框架可以有效地预测预期的未来工作负载,而精度损失很小。他们还展示了如何使用这个框架来提高系统的性能。
Autonomous DBMS中的工作负载预测的目标是使系统能够预测未来应用程序的工作量。因为现实世界应用程序的工作负载永远不会是静态的,系统可以选择优化以基于此预测准备。
负载预测主要是两个挑战,一个是应用程序的查询可能具有非常不同的到达率。因此,一个有效的预测模型必须能够识别和描述这些到达率模式中的每一个。第二个是workload的查询的组合和数量会随着时间进行变化,如果工作负载和过去偏差很大,就得重新弄一个model。
下面是调研3个实际数据库,workload的共同特征和模式,讨论有效的预测模型要克服的challenge。
我们现在对从真实世界的数据库application·收集的三个样本工作负载跟踪进行简要描述:
三种常见工作负载模式,前两种模式是数据库应用程序中的查询可能具有的不同到达率的示例。第三种模式展示了工作负载中查询的组合如何随时间变化。
要使预测框架在实际的DBMS部署中工作,必须解决三个挑战。
QueryBot 5000 (QB5000)是一个工作负载预测框架,既可以作为外部控制器运行,也可以作为嵌入式模块运行。
目标DBMS连接到该framework,然后转发query,当QB5000接收到这些查询时,它将它们存储在其内部数据库中。然后,它训练模型来预测哪些类型的查询,以及DBMS在未来预计执行多少查询。然后,self-driving DBMS可以使用这些信息来部署优化,以提高其目标目标(例如,延迟,吞吐量).
查询转发到QB5000的时候,先进入pre-processor和clusterer,将查询映射到之前见过的查询里面去,这使QB5000能够在不牺牲准确性的情况下减少跟踪SQL查询的计算和存储开销。preprocessor通过从SQL字符串中提取常量参数,将原始查询转换为通用模板,记录每个模板的到达率历史。
为了进一步减少计算资源压力,QB5000然后根据其语义(例如,它访问的表)将模板映射到最相似的先前查询组。然后,Clusterer使用在线聚类技术进一步压缩工作负载,将具有相似到达率模式的模板分组在一起。它能够处理不断变化的工作负载,新查询出现,旧查询消失。
在最后阶段,Forecaster选择最大的模板集群(即查询量最高的聚类),然后根据每个聚簇中templates的平均到达率训练预测模型。模型预测了每个template cluster将在未来执行多少query 一小时后或者一天后,DBMS将根据它对应用程序未来的期望来决定如何优化自己,而不是根据过去发生的情况。QB5000还会随着工作负载的变化自动调整这些集群。每次template的cluster分配发生变化时,QB5000都会重新训练它的模型。
当DBMS运行时,Pre-Processor总是提取新的查询,并在后台实时更新每个template的历史到达率。clusterer和forecaster定期更新聚类分配和预测模型。当QB5000预测未来的预期工作负载时,它使用最新的数据作为模型的输入。
对于OLTP工作负载,应用程序调用具有不同输入参数的相同查询。对于OLAP工作负载,用户经常与仪表板或报告工具进行交互,这些工具提供了使用不同谓词和输入参数构造查询的接口。
这类类似的查询以相同的频率执行,并且通常在系统中具有相同的资源利用率。因此,可以把具有相同template的查询,减少了需要跟踪的查询的数量,因为它只需要维护每个模板的到达率信息,而不是每个单独的查询。QB5000的PRE-PROCESSOR是如何收集和组合它从DBMS接收到的查询呢?
PreProcesssor主要是两步:
QB5000跟踪在给定时间间隔内到达每个模板的查询数量,然后在每个时间间隔结束时将最终计数存储到internal catalog table中。系统将过期的到达率记录以更大的间隔进行汇总,以节省存储空间。
QB5000为每个模板维护一组查询的原始参数样例。我们使用reservoir抽样从包含大量或未知数量项目的列表中选择固定数量的低方差items,方便autonomous DBMS的planning 模块在cost/benefit的时候会使用。Preprocessor执行最后一步,聚合具有等效语义特征的模板,以进一步减少QB5000跟踪的唯一模板的数量。评估语义等价性是一项非常重要的工作,关于这一主题已经有了广泛的研究。QB5000使用启发式方法来近似模板的等价性。如果两个模板访问相同的表、使用相同的谓词并返回相同的投影,则认为它们是等价的。人们可以使用更正式的方法来充分利用语义等价。
启发式足够了,在不降低准确性的情况下提供了合理的性能。将研究更复杂的方法作为未来的工作。
表2显示,对于示例工作负载,QB5000的Pre-Processor能够将查询数量从数百万个减少到最多数千个模板。
训练一个模型可能需要三分钟以上的时间,所以对每个template都构建模型是不行的,还得聚类。Clusterer将具有相似模式的模板的历史到达率聚合,这个过程通过把template映射到高维向量然后计算相似度实现。为了支持在动态环境(工作负载、DBMS物理设计、配置都会发生改变)对负载进行建模,聚类算法必须使用不依赖于数据库当前状态的特征生成稳定的映射。
QB5000聚类过程主要有三个行文阶段,第一是从每个template提取特征,第二是描述如何确定她属于哪个cluster,第三是介绍QB5000的聚类算法,该算法支持随着应用程序工作负载的发展而进行增量更新,以及框架如何快速确定是否重建其集群。
从template提取三种特征,physical、logical、arrival rate history。
计算历史到达率的相似度:QB5000首先随机采样当前时间点之前的时间戳,QB5000取这些时间戳处的值子集,形成一个向量。两个特征之间的相似度定义为两个向量的余弦相似度。如果模板是新的,我们将其可用时间戳与其他模板向量中的相应子集进行比较。当前实现是使用10k 时间戳采样点来构建一个特征向量vector。
逻辑特征和到达率历史特征表达了查询的不同特征。基于到达率特性的聚类可以为实际应用程序生成更好的模型,因为它们捕获了查询如何影响系统性能。。尽管使用模板的到达率可以避免在DBMS更改时重新构建聚类,缺点是容易受到工作负载变化的影响。
聚类算法使用的是DBSCAN,是基于密度的聚类算法:给定某个空间中的一组点,它将有许多邻近点(称为core objects)的点分组在一起,并将单独位于低密度区域的点标记为离群点(即最近的邻居也很远的点),与K-means不同,该算法不受小簇数量或簇密度的影响。
原始的DBSCAN算法通过检查对象与集群的任何core objects之间的最小距离来评估objects是否属于集群。调整成距离聚簇中心的距离来衡量,这是因为QB5000使用集群的中心来表示作为该集群成员的模板,并使用该中心构建预测模型。
DBSCAN算法的on-line extension在更新集群时有很高的开销,本文的online DBSCAN变体使用阈值ρ(0≤ρ≤1)来决定模板的到达率必须有多相似才能属于同一簇。ρ值越高,聚类内模板的到达率越相似,建模结果越准确。但是,如果生成的集群数量更多,计算开销也会更高。在附录a中对该值的设置进行了敏感性分析。
聚类过程三个步骤
除了定期执行这三个步骤外,QB5000还监视工作负载中的新模板。如果以前未见过的模板的百分比高于阈值,则会触发这些步骤以适应工作负载变化。正确设置这个阈值取决于目标DBMS的性能属性。
评价一下这个算法的话:1. 增量算法能够自适应调整来适应负载变化,不需要预热或者提前了解负载。2. 复杂度是O nlogn。3. step2终止了递归所以不一定收敛,但是不影响有效性。
聚簇修剪(剪枝)。即使在使用聚簇技术减少QB5000需要建模的查询总数之后,由于到达率模式的长尾分布,实际应用程序仍然倾向于拥有大量簇。只有少数大型聚簇表现出主要的工作负载的模式,但有几个小型簇更像是干扰的噪声,QB5000不为它们构建模型。
实验表明:对于我三个示例工作负载,五个最大的聚簇就覆盖了高达95%的查询量。最后一个阶段是构建预测模型来预测集群查询的到达率模式。这些模型允许DBMS的planning module估计应用程序将来将执行的查询数量,并选择适当的优化来满足SLA。下面描述QB5000如何构建和使用其预测模型,首先解释它的底层数据结构和训练方法,然后讨论了QB5000如何在多个模型上支持同一簇的不同预测范围和间隔。
六种模型,三个属性linear、memory:一个模型可以保留记忆允许它使用输入数据和从过去观察中“记住”的信息来预测未来。kernel:为非线性关系建模提供另一种方法
线性模型通常在近期(例如,一小时)做出预测方面表现更好,而非线性模型在更长的时间(例如,超过一天)做出预测方面表现更好。但是,确定在不同的时间范围和不同的工作负载上使用哪种类型的模型是非常重要的。
另一个方法是ENSEMBLE集成方法,该方法将多个模型组合在一起以进行平均预测。集成方法用于预测任务,将几种机器学习技术结合到一个预测模型中,以减少方差或偏差(例如,boosting)。
Linear Regression (LR):
在QB5000中,框架基于过去指定时间段内查询的到达率,对集群中查询的未来到达率进行回归。
Recurrent Neural Network (RNN):QB5000使用LSTM
平均LR和RNN模型的预测结果来应用集成方法,尽管集成方法获得了良好的平均预测精度,但我们发现它无法预测远离每次发生的工作负载中的周期性峰值,比如年度pattern。但是这种是DBMS常见的workload。所以用到下面的预测模型
Kernel Regression (KR):LR模型的非线性变体,它使用Nadaraya-Watson estimator,给定输入的预测是训练输出的加权平均值,其中权重随着给定输入与相应训练输入之间的距离而减小。
KR并不能很好地利用以前没有见过的数据进行推断,就平均预测精度而言,它的性能比ENSEMBLE差。但这是唯一一种能够应对每年招生人数激增的研究模式。
QB5000使用HYBIRD 预测模型,来自动确定何时使用来自ENSEMBLE的预测而不是来自KR的预测。由于KR擅长用少量观测值预测峰值,如果KR预测的workload量高于ENSEMBLE的超过了阈值γ使用KR的预测,在QB5000中,我们将γ设置为150%,考虑到测试的所有应用程序工作负载提供了最准确的预测。在附录C中提供了γ的敏感性分析。
预测模型的范围是根据其水平和间隔来定义的。
prediction horizon:指的是预测到多远的未来,prediction interval模型可以预测的时间粒度,例如,模型可以预测每隔一分钟或一小时将执行的查询数量。
QB5000将记录查询到达率的间隔设置为一分钟,这是QB5000能够提供给DBMS的最佳预测级别。为了预测峰值,使用一小时为间隔训练KR来预测。
第一个实验的目标是证明QB5000可以使用少量最高容量的聚簇对大部分数据库工作负载进行建模。
我们首先计算在整个工作负载执行过程中,每天最大聚簇的容量与总工作负载容量之间的平均比率。将给定聚簇的volume除以当天所有聚簇的总volume来计算的。下面图5结果显示,容量最大的聚簇覆盖了工作负载中的大部分查询
下面测试了 这个聚簇的稳定性,测试连续两天内聚簇发生改变的workload的占比,就是100天内有多少次发生了更改。对于Admissions和BusTracker来说,90%范围内,五个最大的聚簇中最多有一个变化。所以对workload的表征是有效且稳定的。
mooc工作负载比其他两个有更多的集群变化,因为随着教师创建和启动新课程,会出现新的查询。这表明QB5000的增量聚类算法可以捕捉应用程序工作负载随时间变化时的变化。
QB5000对覆盖工作负载中总查询95%以上的最高容量聚簇进行建模。QB5000训练一个单一的预测模型,这个模型预测所有clusters的query arrival rates,这允许跨集群共享信息,从而提高预测的准确性,MSE越小,预测精度越高。
另一个考虑是,因为对于self-driving db来说预测模型一个特点就是对超参不敏感,所以实验中不管workload or horizons 都fix了超参。
对比了和其他模型的预测效果,包括ARMA、FNN、PSRNN。
演示QB5000如何使用其HYBRID模型来预测每个集群的查询到达率。BusTracker的一小时的水平预测比一周的水平预测更准确。效果都很好。
峰值预测。评估QB5000预测增长和峰值工作负载模式的能力。
上图结果显示,ENSEMBLE及其两个基本模型无法预测工作负载中的峰值。KR是唯一成功预测峰值的模型。这是因为它的预测是基于测试点和训练数据之间的距离,其中每个训练数据点的影响随其与测试点的距离呈指数递减。
接下来,本文用不同的预测间隔来评估本文的ENSEMBLE预测模型的预测精度和训练时间。
10.a就是以不同的horizon,基本上随着horizon的边长,准确率变低,相同horizon里面随着间隔的变短准确率变高,较短的时间间隔对较长的视界尤其有利,因为未来和过去的到达率之间的关系更为复杂。但是较短的间隔增加了数据中的噪声,并且需要更多的间隔来包含相同的时间范围。
10.b显示了每个模型在不同间隔下的训练时间,在较长的时间间隔上训练模型所需的时间更少,这是符合预期的,
这里面一个trade-off是 设置间隔 和 self-driving DB自己的planning capabilities。
检车QB5000的计算和存储开销,记录它的四个组件花费的时间和空间量。
表4显示了QB5000的所有组件都有合理的存储开销。结果还表明,训练rnn模型是计算成本最高的任务。
演示self-driving dbms如何使用QB5000的工作负载预测进行主动优化,从而提高系统性能。将QB5000与MySQL和PostgreSQL集成,以处理、集群和预测SQL工作负载,并为预测的工作负载自动构建index。PostgreSQL (BusTracker)和MySQL (Admissions)。
使用基于AutoAdmin引入的索引选择技术来生成要构建的索引集,AutoAdmin首先为样例工作负载中的每个查询选择最佳索引,以形成候选索引集。然后,它使用启发式搜索算法在候选索引中查找最佳有界索引子集。本文没有使用示例工作负载来生成候选索引,而是使用Clusterer生成的三个最大集群的预测工作负载。此评估的目的是演示QB5000动态建模和预测工作负载的能力,而不是索引选择算法的有效性。将自动索引选择(AUTO)的性能与静态索引选择方法进行比较(所以可能是效果不咋样),静态索引选择方法使用相同的索引选择算法,但将其应用于整个查询历史中的一个固定工作负载样本,该查询历史是在实验开始之前手动准备的(static)。
在实验期间AUTO总共构建20个索引,因此我们设置STATIC在实验开始前也构建20个索引。
垂直的绿色虚线表示DBMS何时构建新索引。
AUTO最初的性能比STATIC差,因为它还没有创建任何二级索引,但在实验结束时实现了28%的吞吐量和23%的延迟改善。这是因为AUTO利用QB5000的预测,选择了STATIC没有选择的四个索引。在pg里面,AUTO只选择一个与STATIC不同的索引,性能相似。
比较了QB5000的Clusterer使用的到达率历史特征与逻辑特征(AUTO-LOGICAL)的有效性。根据SQL字符串逻辑结构的相似性对模板进行分组。更具体地说,模板的逻辑特征向量由查询类型(例如,INSERT、SELECT、UPDATE或DELETE)、访问的表、引用的列、子句的数量(例如,JOIN、HAVING或GROUP BY)和聚合的数量(例如,SUM或AVG)组成。
结果显示AUTO- logical的dbms吞吐量比AUTO慢20%左右。
逻辑特性导致更糟糕的索引选择有两个原因:首先,SQL查询不足以确定两个模板是否会对系统产生类似的影响。第二个原因是同一逻辑特性聚簇中的模板可能有多个到达率模式,包括一次性查询等异常情况,这使得forecaster更难识别这些模式并难以根据聚簇中心预测趋势。
将以前在系统工作负载建模方面的工作分为几类:资源估计和自动伸缩resource estimation and auto-scaling、性能诊断和建模performance diagnosis and modeling、, shift detection、workload characterization for system design、metrics prediction for queries。
本文提出了一个预测框架,允许DBMS根据历史数据预测未来查询的预期到达率。使用查询的逻辑组合来减少需要监控的查询数量,使用在线聚类方法将具有相似模式的查询模板分组在一起,使用混合学习方法来预测查询到达率。结果表明,QB5000在帮助DBMS实时选择目标工作负载的最佳索引方面是有效的。