论文部分内容阅读
随着大容量内存的出现和内存价格的逐渐降低,内存数据库开始被广泛使用。内存数据库带来性能提升的同时,也带来了新的挑战。由于内存存取速度的增长难以匹配处理器速度的增长,导致在数据查询中,内存访问延迟已经成为数据库查询的主要代价之一。多核处理器的出现,使得上述问题更加严重。与此同时,数据规模的增大,导致数据处理过程中出现临时错误和数据倾斜的机会增加,查询算法需要一定的纠错能力,避免整个任务的重新执行。多线程并行访问共享Cache造成的访问冲突会给查询执行性能造成负面影响。此外,有限的内存带宽和多核处理器各个核心间的负载不均衡也影响了线程的执行效率。因此,需要充分利用共享Cache多核处理器的处理性能,减少共享Cache访问冲突对内存数据库查询优化。面向多核处理器的此类优化尚有许多问题需要解决。本文针对数据库查询的并行执行进行研究。针对连接查询存在的性能瓶颈,在共享Cache多核处理器环境下进行连接查询的相关优化。主要工作和创新点如下:提出了基于数据划分策略的多线程并行聚集连接算法。针对内存受限的服务器,分别提出了Radix-Join算法和Sort-Merge Join算法的并行算法,并针对多核共享Cache环境下对算法进行了优化。在数据划分阶段,提出了一种自适应的划分策略,使得多线程执行可以随可用内存大小变化策略;在聚集连接阶段,提出了基于数据规模灵活变化的并行连接执行策略,并优化了聚集连接时的内存访问。上述优化技术能够较大减少多线程执行时的共享Cache访问冲突和处理器核心间的负载不均衡,提高了线程的执行效率。针对传统连接算法缺少灵活的调度和必要的容错能力,提出了基于MapReduce的连接并行执行框架。与Radix-Join算法类似,该框架主要分为Map和Reduce两个阶段,适合使用数据划分策略。本文分析了内存连接的各个阶段对Join算法性能的影响,提出了一种可利用MapReduce的动态机制,避免传统并行连接算法实现的数据任务分派不均和容错问题。算法使用MapReduce编程框架,并通过封装分块标记减少MapReduce Join执行过程中标记和排序的计算开销,使算法性能显著提高。实验结果表明,该算法在共享内存体系结构下在性能上相比已有算法有显著提升。