(Paper Weekly04) Plan-Structured Deep Neural Network Models for Query Performance Prediction

这篇paper值得关注的点在于如何将传统CS和深度学习结合,以及如何自动/手动挑选feature.

在数据库管理系统中,query performance prediction是一个长期以来没能很好解决的问题。需要考虑的因素有:

  • 数据库接收的指令如何优化,优化后执行树的结构,指令能否并行
  • 相关指令涉及的数据量大小,operator类型
  • 实际系统中网络、IO等“环境变量”的影响

本文考虑的情景主要解决了第二点和第一点的部分。

Motivation:

现有的优化工具可以将复杂的指令转化成一棵执行树。那么如果对这棵树上的每个节点,用一个neural unit(其实就是一个小网络)进行建模,利用这些小网络来预测相应节点的latency,那么根节点的输出岂不就是系统整体的延迟。

这从本质上来说并没有什么复杂的原理,无非是把DL/NLP里面针对树结构的方法搬到QPP上。

Isomorphic to the structure of the execution plan:

将DNN的基本单元设置为Neural Unit,对应每种operation; 对于每一个execution plan,搭建一个同构的树状网络

Heterogeneous tree nodes:

每种operator含有的property的数量、类型是不同的。比如join操作可能有9个property,filter操作可能有7个另外的feature,如果把所有的property都汇集到一起作为operator的表示,会产生sparsity的问题

Input feature vector:

可能的child节点信息和operator feature信息,后者可通过DBMS的optimizer的API获取,比如operator类型、需要多少次I/O等。相同类型的operator会得到size相同的vector,但具体数值可能不同,计作a ⃗, A表示operator的类型。

Output vector:

分为两部分:到目前为止的latency(1维)和一个虚拟的data(d维)。注意和实际的data没有任何关系,可以认为输出就是一个d+1维的vector

模型结构:

训练细节:

  1. Batch-sample

    由于不同的query对应的执行树不同,因此如果直接随机采样小batch,可能会带来比较大的训练开销。本文先采样一个大的batch,再将其按照不同结构分为小batch,每个小batch对应的网络结构是相同的。最后更新梯度的时候通过不同结构的样本数量进行加权平均。

  2. Information sharing

    这个很迷,不知道为啥要叫information sharing,其实跟信息论里面的information毫无关系无非是针对树状网络,先对底层叶子结点进行参数更新,保存中间层unit的输出,逐层往上计算loss和更新参数。

实验结果:

和SVM以及另外两种hand-crafted方法作对比,吊打原始人,图表画的很粗糙,要是DL会估计中不了。略。

陈沁宇
陈沁宇
Master Student@PKU

My research interests include natural language processing, machine learning and recommender systems.