说明:以下内容仅本人阅读后根据原文进行提取翻译的,仅个人理解与机翻,难免有误。
1 介绍
关系数据库系统在传统上都是针对I/O性能进行优化的,并且会使用N-ary Storage Model(NSM)模型在磁盘页上顺序组织记录。但是,最近的研究表明,缓存(cache)利用率和性能,在现代的平台上,已经变得越来越重要。 当处理器提交一个请求时,数据很可能在主存中。然而,将数据从存储器传送到缓存会引起显著的延迟。一些工作负载特性研究2 证明,对于内存密集型的DBMS来说,性能遭受缓存未命中的影响比其他类型的工作负载影响大。为了解决与缓存相关的延迟,数据库研究人员开始关注优化缓存性能。
2 有关工作
2.1 NSM
传统关系的记录存储在N-ary Storage Model(NSM)的开槽磁盘页中。NSM在数据页上按顺序存储记录。每个记录都有一个记录头(RH),其中包含一个null bitmap,可变长度值的offset和其他特定于实现的信息。每个新记录通常从页的开头开始插入到第一个可用的空闲空间中。记录可以具有可变长度,因此指向新记录开始的指针(偏移量)存储在从页结束起的下一个可用槽中。通过从页的末尾跟随第n个指针来访问页中的第n个记录。
然而,在属性计算期间,NSM 表现出较差的缓存性能,考虑如下图的查询。为了计算属性,查询处理器使用扫描操作符,该操作符从关系中的每个记录中检索属性age的值。假设图1中间的NSM页已经在主存储器中,并且该高速缓存块大小小于记录大小,则扫描操作符将导致每条记录一次高速缓存未命中。
2.2 DSM
DSM(Decomposition Storage Model)存储模型提出的目的是为了最小化无用的I/O。DSM采用了不同于NSM的思路,DSM会对关系进行垂直分解,并为每个属性分配一个子关系,因此,一个具有n个属性的关系,会被分解成n个子关系,每个子关系只有当其相应的属性被请求时才会被访问。也就是说,它是以关系数据库中的属性或列为单位进行存储,关系的元组中的同一属性值被存储在一起,而一个元组中不同属性值则分别存放于不同的页中。
当顺序访问一个属性的值时,DSM提供了更高程度的空间局部性。在单属性扫描期间,DSM表现出较高的I/O和缓存性能。当查询访问每个关系中少于10%的属性时,DSM的性能好于NSM。然而,当评估多属性查询时,数据库系统必须联接参与的子关系,以便重构分区记录。连接子关系所花费的时间随着结果关系中属性的数量而增加。此外,DSM招致显著的空间开销,因为每个记录的记录id需要被复制。
另一种算法基于属性亲和图对每个关系进行分区,该图根据属性在查询中一起出现的频率连接属性对。属性被分组在片段中,并且每个片段被存储为单独的关系,以最大化I/O性能并最小化记录重构成本。当查询中的属性集是片段中属性的子集时,I/O性能会有显著的提高。基于亲和度的垂直分区的性能很大程度上取决于查询是否涉及同一片段内的属性。
3 PAX
3.1 PAX结构介绍
为了存储具有n个属性的关系,PAX将每个页面划分成n个迷你页面。然后它将第一个属性的值存储在第一个迷你页面中,将第二个属性的值存储在第二个迷你页面中,依此类推。记录头信息分布在迷你页面上。
每个新分配的页面包含一个页面标题和与关系度相等的多个小页面。页面标题包含属性的数量、属性大小(对于固定长度的属性)、到小页面开始的偏移量、页面上的当前记录数以及仍然可用的总空间。固定长度的属性值存储在F-minipage中。在每个F-minipage的结尾处,存在每个记录具有一个条目的存在位向量,其表示可空属性的空值。可变长度属性值存储在V-minipage中。V-minipage是有槽的,每个值的末尾都有指针。空值由空指针表示。
3.2 PAX优点
PAX(a)最大化每列内和每页内的记录间空间局部性,从而消除对主存储器的不必要的请求而没有空间损失,(b)招致最小的记录重构成本,以及(c)与其他设计决策正交,因为它仅影响存储在单个页上的数据的布局(例如,可以决定使用NSM存储一个关系,而使用PAX存储另一个关系)
3.3 NSM vs DSM vs PAX
商业系统使用NSM,因为DSM需要昂贵的连接,这抵消了记录间空间局部性的好处。然而,NSM表现出次优的高速缓存行为;需要一种更好的数据放置方案,其将以最小的记录重建成本提供空间局部性。PAX结合以下两个关键特性,提供两全其美的服务:记录间的空间局部性(使得该高速缓存空间被充分利用),以及通过将每个记录的所有部分保持在同一页中来最小化记录重构开销。作为一个额外的优点,在现有的DBMS上实现PAX只需要更改页面级数据操作代码。
4 PAX实现
NSM, PAX, and DSM were implemented as alternative data layouts in the Shore storage manager。下图说明了如何实现NSM记录。首先存储固定长度的属性值,然后存储偏移量数组和包含可变长度属性值的迷你堆。Shore在每条记录的前面添加一个12字节的标签,其中包含Shore特定的信息,如序列号、记录类型、标题长度和记录长度。此外,它在页的末尾使用4字节的槽(两个字节用于偏移量,另外两个字节用于为每条记录分配的空间量)。这总计为每条记录16字节的开销。在当前实现中,使用PAX存储的TPC-H表需要的空间比使用NSM存储时少8%。这个好处的3-4%是由于PAX不需要在页面末尾的插槽表。其余部分是由12字节Shore记录标记产生的Shore特定开销。
4.1 加载和插入数据
从数据文件大容量加载记录的算法首先根据属性值大小分配页上的每个迷你页。在可变长度属性的情况下,它使用一个提示(来自用户或来自前几个记录的平均长度)作为平均值大小的指示。PAX通过将每个值复制到适当的迷你页面来插入记录。 当存在可变长度值时,可能需要调整迷你页面边界,以适应插入页面中的记录。如果记录适合页面,但其单个属性值不适合,则算法基于页面中迄今为止的平均值大小和新记录大小重新计算迷你页面大小,并通过适当地移动迷你页面边界来重新组织页面结构以容纳新记录。 当页面已满时,它会分配一个新页面,其初始迷你页面大小等于先前填充页面中的迷你页面大小
4.2 更新数据
对可变长度属性的更新可能会拉长或缩小记录; 可能需要重新组织页面以适应更改,并且必须更新槽表。如果更新的记录超出页中可用的空闲空间,则该记录将移动到另一页。 PAX通过计算相应迷你页面中属性的偏移量来更新属性值。可变长度属性更新仅需要V-minipage级重组,以仅移动更新属性的值。如果新值比V-minipage中可用的空间长,则V-minipage从相邻迷你页借用空间。如果相邻的小页没有足够的空间,则将记录移动到不同的页。
4.3 删除数据
NSM 删除算法使用插槽数组来标记已删除的记录,并且在将来插入时可以填充空闲空间。PAX 使用页面开头的位图跟踪已删除的记录,并使用快速位计算确定记录是否已被删除。在删除记录后,PAX 重新组织小型页面内容以填补空白,从而最大限度地减少可能影响 PAX 最佳缓存利用率的碎片。小页面重组不会影响 PAX 的性能,因为它带来的开销最小。属性值偏移量是通过将记录 ID 转换为页中的记录索引来计算的,这将考虑已删除的记录。 对于删除密集型工作负载,另一种方法是将记录标记为已删除,但推迟重组。此算法在迷你页中创建间隙,导致文件扫描期间的缓存利用率不理想,因为删除的记录数据偶尔会被带入该高速缓存。为了将高速缓存性能维持在可接受的水平,系统可以调度周期性的文件重组。我们计划提供一个选项,以便在每个文件的基础上使用最适合每个应用程序的选项。
4.4 扫描与连接
PAX 为查询中涉及的每个属性调用一个扫描操作符。每个操作符按顺序从相应的mini page读取值。使用计算的偏移量从相应的minipage检索合格记录的投影属性值。 连接操作符从两个扫描操作符接收其输入,每个扫描操作符读取一个关系。输出可以通过作为参数传递给运算符的函数进行筛选。
5 实验
5.1 缓存延迟提升
下图说明了PAX减少了与数据缓存相关的延迟,因此可以更快地运行查询。左边和中间的图形分别显示了由于NSM和PAX两个缓存级别的数据未命中而导致的每个记录的处理器停滞时间。PAX由于更高的空间局部性,减少了在两个缓存级别的数据相关的惩罚。如下图右侧的图所示,使用 PAX 时,整个处理器的失速时间减少了75% ,因为它不需要等待从主存到达的数据那么长的时间。在使用 NSM 时,与内存相关的损失占执行时间的22% ,而在使用 PAX 时仅占10% 。
5.2 敏感性分析实验
随着查询中涉及的属性数量的增加,NSM和PAX的执行时间会收敛。最左边的图中,查询的投影性从1到7个属性变化。在所示的实验中,即使结果关系包括所有属性,PAX也更快。PAX利用谓词以及投影属性上的空间局部性,而NSM在50%的时间内将无用信息带入该高速缓存。最右边的图显示了当选择谓词中的属性的数量从1变化到7时所经过的时间。PAX由于位置原因再次更快。在这些实验中,DSM的性能比NSM和PAX慢约9倍。随着查询中涉及的属性数量的增加,DSM必须加入相应数量的子关系。
5.3 加载实验
下图比较了三种存储组织分别加载100 MB、200 MB和500 MB TPC-H数据库所需的时间。DSM的加载时间比NSM和PAX的加载时间要长得多,因为DSM为每个属性创建一个关系,并为每个值存储一个类似于NSM的记录,沿着值的记录id。
5.4 查询实验
下图描绘了当对100、200和500-MB TPC-H数据库运行四个TPC-H查询时的PAX/NSM 加速。PAX在所有这些实验中均优于NSM。
5.5 更新实验
当用一个更大的属性值替换一个可变长度的属性值时,PAX平均只需要移动V-minipage的一半数据就可以满足新的要求。平均而言,NSM必须移动页面的一半数据(因为它移动包含“无辜”的非引用属性的记录)。当执行更新时,PAX总是比NSM快,提供10- 16%的加速比。NSM和PAX的执行时间随着投射性的增加而收敛。同样,PAX/NSM的加速会随着更新属性数量的增加而降低。
6 总结
与NSM和DSM相比,使用PAX在磁盘页上排列数据是有益的: 与NSM相比,PAX的L2缓存数据未命中和停滞时间减少了50-75%,而范围选择查询和主内存表更新的执行时间减少了17-25%。当运行TPC-H查询对检索到的数据执行计算并需要I/O时,PAX的速度比NSM高11-48%。 与DSM相比,PAX缓存性能更好,查询执行速度更快,因为PAX不需要连接来重建记录。因此,PAX的执行时间随着查询参数的变化而保持相对稳定,而DSM的执行时间随着这些参数线性增加。