关键词:
分布式内存数据库系统
查询处理
查询优化
调度
NUMA架构
摘要:
回顾数据库系统在过去四十余年的发展历史可以发现,数据库系统的演变总是被实际应用中不断增长的数据存储和数据操纵需求所驱动,而数据库系统架构的革新总是受到不断发展和进步的计算机硬件的巨大影响。如今,智能网络、智能交通等实际应用无时无刻不在收集着大量的数据,并向数据库系统寻求帮助,以对这些海量数据进行实时分析。传统的磁盘数据库系统主要由于受限于缓慢的磁盘I/O,不能在大规模数据上实现有效的实时数据分析。近年来,伴随着硬件制造技术的发展,拥有大容量内存和强大多处理器的服务器价格不断降低,对于很多实际应用而言,无论是从技术的角度还是从经济的角度,都可以考虑将数据装载到内存之中,以大幅度地提升数据查询性能。因此,在过去的十年中,全球涌现出MonetDb, Vectorwise, SAP HANA, HyPer等许多内存数据库系统,内存数据处理也迅速成为学术界的研究热点。尽管大量的研究工作都致力于提高集中式内存数据库系统的性能,但不容忽视的问题是:集中式内存数据库的性能受限于单台计算机有限的内存容量和处理器个数,难以满足日益增长的数据分析需求。与集中式内存数据库相比,分布式内存数据库系统运行在享有丰富内存空间和计算资源的集群之上,具有在大规模数据上进行实时分析的潜力。但与此同时,由于分布式内存数据库系统所运行的硬件环境与传统的数据库有本质区别,传统数据库技术并不能充分发挥集群中的硬件优势,导致低于预期的性能表现。因此,本文致力于研究分布式内存数据库系统中的查询处理技术,旨在通过充分利用集群中的各种硬件资源来提高分布式内存数据库系统的查询性能。本文的主要工作和主要贡献概括如下:1.通过对分布式内存数据库系统中查询处理性能的理论分析,指出了系统的性能瓶颈,明确了本文的优化策略。本文通过理论分析得到了查询代价模型,该模型指出分布式内存数据库系统中查询处理的性能瓶颈具有多样性和多变性。进一步讲,某个查询的性能瓶颈既可能是节点之间的网络数据通信,也可能是某个节点上的内存数据处理,还可能是节点之间不均衡的计算资源分配。查询处理的性能瓶颈取决于节点的负载情况,受到数据分布、硬件特征和算法实现等诸多因素的影响。受到上述结论启发,我们通过降低网络数据传输代价、提高单机内存数据处理性能和优化计算资源分配这三部分工作来提升分布式内存数据库系统的查询处理性能。2.分别对查询编译和查询执行进行了优化,有效地降低了查询处理过程中的网络数据传输代价。相对较慢的网路数据传输和高效的内存数据处理之间巨大的性能差距导致网络数据传输成为分布式内存数据库系统中主要的性能瓶颈。为解决这一问题,我们提出了MNDT算法。该算法在将逻辑查询计划转化为物理查询计划的过程中,尽可能地降低所生成的物理查询计划的网络数据传输量。此外,我们还设计一种新颖的数据交换算子,实现了节点之间高性能、可扩展、负载均衡的网络数据传输,进一步降低了查询过程中的网络数据传输代价。3.探讨了在新硬件架构下进行内存数据查询处理的主要性能瓶颈,并提出了NUMA感知的聚集算法。本文探讨内存数据处理中的性能瓶颈以及相应的解决策略,并对内存聚集运算进行了实例分析。经过深入的分析,我们发现Cache容量失效、Cache一致性失效和加锁代价是限制内存聚集运算性能的主要因素。因此,本文提出了NUMA感知的高性能、可扩展的聚集运算算法。该算法首先在遵循NUMA处理器硬件特性的前提下,将输入数据划分为若干个分区,以提高数据的局部性;然后通过巧妙的调度策略来进行聚集运算,有效避免了Cache一致性失效并大幅度降低了加锁开销。4.提出了弹性流水线框架,解决了分布式查询计算中的计算资源分配问题。在分布式内存数据库系统中,查询处理过程中计算资源分配是否合理,在最小化查询响应时间、提高硬件资源的利用率中起到至关重要的作用。然而,由于每个节点在查询过程中的负载情况难以预测且波动幅度很大,以及传统的迭代器模型中并行度不可动态调整的本质,采用传统的迭代器模型难以实现最优的并行度分配。为了解决这一问题,本文提出了弹性流水线技术,该技术包含弹性迭代器模型和动态调度器。弹性迭代器模型是对传统迭代器模型的升级,添加了动态多核执行的特性。动态调度器在查询处理过程中实时监督各个节点的负载情况,并对并行度进行动态的调整,以实现负载均衡和硬件资源利用率的最大化。弹性流水线框架的意义在于,它赋予执行引擎对查询处理的并行度进行动态调整的能力,实现并行度与查询编译的隔离,避免查询编译时由信息缺失和不充分所引起的不恰当的并行度分配。综上所述,本文对分布式内存数据库系统中查询处理的性能瓶颈进行了系统的分析,并从系统架构、算法和系统实现的角度上探讨了系统的各种优化策略。本文的研究工作是建立在对已有理论、技术和方法详尽的调研之上而完成的。通过在标准测试集和真实数据集上大量的实验,