论文部分内容阅读
连接操作是关系数据库系统中最基本、最昂贵的操作,对数据库的性能有着重要的影响。为满足高性能和低功耗的要求,工业界和学术界越来越多地利用新型非易失性内存读写速度快、可按字节寻址、低功耗、存储密度大等特点来存放需要持久化的数据。为此,现已有多个针对非易失性内存的内存文件系统,其文件读写方式和性能都不同于传统基于块设备的文件系统。而数据库里的连接表作为文件存放在文件系统中,内存文件系统对连接操作的性能影响需要研究。然而,目前尚无针对连接操作在内存文件系统的性能分析及其并行化的研究。本文以新型内存文件系统SIMFS(Sustainable In-Memory File System)为代表,研究内存文件系统的数据读写与传统块设备文件系统如EXT4(Fourth Extended File System)的I/O路径等方面的差异。然后分别实现最常用的Nest Loop Join、Sort Merge Join和Hash Join三种连接操作,在SIMFS和EXT4下设置不同的数据读写块大小和I/O大小对三种连接操作进行测试。本文分别从内存文件系统对连接操作的性能优化、块大小对连接操作的影响、三种连接操作之间的比较以及连接操作中数据的读写等方面进行分析。实验结果表明三种连接操作在SIMFS较EXT4中均有不同程度的性能提升。在不同文件系统下连接操作受到块大小的影响不同,传统文件系统下,连接操作受到块大小改变的影响更大。Hash Join和Sort Merge Join分别通过哈希和排序的方式减少数据的读取和比对,性能相对Nest Loop Join有明显的提升,Hash Join的性能又优于Sort Merge Join,三种连接操作在不同文件系统下的性能差距略有不同。不同文件系统下,连接操作的数据读写在总连接过程中所占比例不同,内存文件系统下的数据的读写在连接操作中的所占的比例较小。根据对实验结果的分析,本文分别提出相关的优化建议。不同于基于块设备的文件系统,内存文件系统下连接操作的优化已经不仅要考虑数据的读写,还必须优化算法的CPU计算时间。为此,本文重新设计Hash Join算法,使用OpenMP的方式并行执行Hash Join中待连接表的数据读写和哈希操作。结果显示,数据读写和哈希的并行性能提升可达40%左右。最坏情况下,并行数据读写和哈希的性能提升仍在11%以上,获得较好的预期效果。