一种基于pm的数据库页缓存方法及系统

文档序号:1845423 发布日期:2021-11-16 浏览:6次 >En<

阅读说明:本技术 一种基于pm的数据库页缓存方法及系统 (Database page caching method and system based on PM ) 是由 闫宗帅 屠要峰 陈河堆 郭斌 黄震江 韩银俊 解海波 王涵毅 于 2020-06-15 设计创作,主要内容包括:一种基于PM的数据库页缓存方法,包括以下步骤,将表文件映射到内存;对缓存页进行区域划分;为划分区域后的缓存页设置对应的页面描述符;获取修改区域,并修改相应的页面描述符;将修改区域的数据刷写到PM内存。本发明还提供一种基于PM的数据库页缓存系统,减小记录页改动点开销的同时进一步减小写放大,提升性能,以并行的方式将cache line block刷盘,进一步提升刷盘效率和硬件使用寿命。(A database page caching method based on PM comprises the following steps of mapping a table file to a memory; carrying out region division on a cache page; setting a corresponding page descriptor for the cache page after the region division; acquiring a modification area and modifying a corresponding page descriptor; and flashing the data of the modified area to the PM memory. The invention also provides a database page caching system based on the PM, which reduces the cost of change points of record pages, further reduces write amplification, improves the performance, and further improves the disk-brushing efficiency and the service life of hardware by brushing the cache line block in a parallel mode.)

一种基于PM的数据库页缓存方法及系统

技术领域

本发明涉及数据处理技术领域,尤其涉及基于PM的数据库页缓存方法及系统。

背景技术

现有的关系型数据库系统为面向磁盘的数据库系统,主要架构是在HDD和DRAM构建的两层存储层级上。由于关系型数据库数据本身很大,不可能全部存储在内存中,并且内存本身不具备持久性,因此需将数据页持久化到磁盘上。

传统存储介质都是块设备,读写的最小单位是块(Block),I/O时延从毫秒级别到微秒级别不等,而DRAM则是纳秒级别。出于性能考虑,存储引擎不会直接修改物理磁盘上的数据页,而是先把要修改的这些数据页读入内存缓冲区(本文称数据页在缓冲区中的映像为缓存页),再修改缓存页,事务提交之后择机把这些被修改的缓存页(称之为脏页)刷写到磁盘,完成持久化。存储引擎引入了页缓存机制,有效解决了磁盘慢速I/O与高速CPU之间矛盾。然而,以页为单位的刷写粒度会导致写放大问题,即使一个事务仅修改了某页的几个字节,持久化时也要把整个脏页刷写到磁盘,严重制约了磁盘的有效吞吐量。

发明内容

为了解决上述技术问题,本发明提供一种基于PM的数据库页缓存方法及系统,不仅可以根据bitmap获取哪些cache line block需要刷写,减小记录页改动点开销的同时进一步减小写放大,提升性能,而且以并行的方式将cache line block刷盘,进一步提升刷盘效率,使用cache line block刷盘机制减小IO的同时,提升硬件使用寿命。

为达到上述目的,本发明提供的基于PM的数据库页缓存方法,包括以下步骤:

将表文件映射到内存;

对缓存页进行区域划分;

为划分区域后的缓存页设置对应的页面描述符;

获取修改区域,并修改相应的页面描述符;

将所述修改区域的数据刷写到PM内存。

进一步地,所述对缓存页进行区域划分的步骤,进一步包括,将每个缓存页划分为多个固定大小的区域,每个所述区域的大小为1个缓存行。

进一步地,划分区域后的缓存页,其结构分为页头和页尾,其中,

所述页头,包括:

checksum:数据校验值;

lower:页内空闲空间下限;

upper:页内空闲空间上限;

linp:页内记录的指针数组;

所述页尾,包括:

prepage:前一页页号;

nextpage:后一页页号。

进一步地,所述页面描述符,包括,

tablespace id:表所在的表空间ID;

database id: 表所在的数据库ID;

rel id:表的ID;

page id:PM内存上数据页的页号;

cache line bitmap:标记缓存页中的修改区域。

进一步地,所述获取修改区域,并修改相应的页面描述符的步骤,进一步包括,

对缓存页进行修改;

将页内空闲空间上限指针指向最后一个修改记录;

将页内记录的指针数组指向所述修改记录;

获取修改区域;

将所述页面描述符标记缓存页中的修改区域对应的bit位修改为1;

将第一个区域及修改区域的下一个区域对应的bit位修改为1。

进一步地,所述将所述改动修改区域的数据刷写到PM内存的步骤,进一步包括,遍历所有页面描述符数组,将bit位为1的区域刷写到PM内存。

进一步,包括,所述将bit位为1的区域刷写到PM内存,是以并行方式调用PMDK接口、以用户态的方式刷写到PM内存,进行刷盘持久化。

更进一步地,包括,刷盘持久化刷盘完成后,将页面描述符中bitmap表清0。

为达到上述目的,本发明还提供一种基于PM的数据库页缓存系统,包括,PM内存、DRAM内存、区域划分模块、页面描述模块,以及磁盘刷写模块,其中,

所述PM内存,其用于存储表文件;

所述DRAM内存,其存储缓存页及页面描述符,并根据所述磁盘刷写模块指令,将修改的区域刷写到所述PM内存;

所述区域划分模块,其对缓存页进行区域划分;

所述页面描述模块,其为缓存页设置对应的页面描述符;

所述磁盘刷写模块,其对所述DRAM内存进行控制,将修改的区域刷写到所述PM内存中,进行持久化刷盘。

进一步地,所述区域划分模块,将每个缓存页划分成多个大小为1个缓存行的区域;所述缓存页的结构分为页头和页尾,其中,

所述页头,包括:

checksum:数据校验值;

lower:页内空闲空间下限;

upper:页内空闲空间上限;

linp:页内记录的指针数组;

所述页尾,包括:

prepage:前一页页号;

nextpage:后一页页号。

进一步地,所述页面描述符模块,其设置的页面描述符,包括,

tablespace id:表所在的表空间ID,即表文件存储路径;

database id: 表所在的数据库ID;

rel id:表的ID;

page id:PM上数据页页号;

cache line bitmap(bitmap表):标记缓存页中哪些区域被修改。

更进一步地,所述磁盘刷写模块,其遍历所有页面描述符数组,控制所述DRAM内存,以并行方式调用PMDK接口、以用户态的方式刷写到PM内存,进行刷盘持久化。

为达到上述目的,本发明还提供一种电子设备,包括,处理器;以及

被安排成存储计算机可执行指令的存储器,可执行指令在被执行时使处理器执行上述基于PM的数据库页缓存方法的步骤。

为达到上述目的,本发明还提供一种计算机可读存储介质,计算机可读存储介质存储一个或多个程序,一个或多个程序执行时,执行上述基于PM的数据库页缓存方法的步骤。

本发明的基于PM的数据库页缓存方法及系统,应用PM到数据库系统中,充分利用PM非易失性、按字节寻址、大容量低延迟等新特性,重构其存储引擎系统;设计cache lineaware页,带来了以下有益效果:

不需要精确记录每次页面改动的起始位置,只需要记录改动区域;只需一个位图即可快速定位所有改动点,管理开销非常低。在缓存页持久化过程中,只需通过bitmap表即可快速判断哪些区域需要持久化;充分利用按字节寻址的特性,当刷写脏页时,不再需要将整个数据页都刷写到磁盘,根据bitmap获取哪些cache line block需要刷写,减小记录页改动点开销的同时进一步减小写放大,提升性能;以并行的方式将cache line block刷盘,进一步提升刷盘效率;使用cache line block刷盘机制减小IO的同时,提升硬件使用寿命。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1为根据本发明的基于Cache-line的缓存页结构示意图;

图2为根据本发明的页面描述符数据组结构示意图;

图3为根据本发明的基于PM的数据库页缓存方法流程图;

图4为根据本发明的插入一条记录修改数据页并刷盘的流程图;

图5为根据本发明的基于PM的数据库页缓存系统架构图;

图6为本发明的一个实施例电子设备的结构示意图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

本发明实施例中,通过利用PM硬件非易失性、按字节寻址、大容量低延迟等新特性,将数据页持久化到PM磁盘。

本发明实施例中,不需要精确记录每次页面改动的起始位置,只需要记录改动区域(Area):把每个缓存页划分成固定大小的区域,在页描述符中增加一个位图,每个比特位代表一个区域,当某个区域数据被改动时把该比特位设置为1(称为变脏)。这种方式的优点是管理开销非常低,只需一个位图即可快速定位所有改动点。在给定负载下,区域设置得越小,总的刷写次数就越多,对PM的IOPS要求越高。根据实测结果,Intel Optane DCPersistent Memory的随机读写时延大概在300纳秒左右,可轻松满足IOPS要求。

由于CPU Cache与内存(PM也是内存)交换数据的最小单位是1个Cache Line(缓存行),因此把区域大小设置成1个Cache Line可获得最佳性能。

图1为本发明基于Cache-line的缓存页结构示意图,如图1所示,假设1个缓存页的大小为8KB,1个Cache Line大小为64B,则每个缓存页被分割为128个区域。

数据页结构分为页头和页尾,其中,

页头包括:checksum、lower、upper、linp,其中,

checksum:数据校验值;

lower:页内空闲空间下限;

upper:页内空闲空间上限;

linp:页内记录的指针数组。

页尾包括:prepage、nextpage,其中,

prepage:前一页页号;

nextpage:后一页页号。

为了管理缓存页,每个缓存页都有一个对应的页面描述符,图2为根据本发明的页面描述符数据组结构示意图,如图2所示,描述符以数组的形式组织,数组下标即为内存中数据页页号。页面描述符包括以下几个成员变量:

tablespace id:表所在的表空间ID,即表文件存储路径;

database id: 表所在的数据库ID;

rel id:表的ID;

page id:PM上数据页页号;

还有1个16字节大小的bitmap表:cache-line area bitmap,用于标记哪些区域变脏了。例如,插入一条记录到1个干净的缓存页,数据存放位置横跨第9和第10个区域,由于页面变动都会涉及到Header(位于第1个区域)的改动,因此,对应的bitmap值为0000 00000000 0301。在缓存页持久化过程中,只需通过bitmap表即可快速判断哪些区域需要持久化。

实施例1

图3为根据本发明的基于PM的数据库页缓存方法流程图,下面将参考图3,对本发明的基于PM的数据库页缓存方法进行详细描述。

首先,在步骤301,将表文件映射到DRAM内存。

本发明实施例中,通过持久内存开发工具包PMDK,将PM内存的表文件映射到DRAM内存中。

在步骤302,对缓存页进行区域划分和页面描述。

本发明实施例中,对数据库缓存页进行划分区域,包括,把每个缓存页划分成固定大小的区域, 其中,把区域大小设置为1个Cache Line,数据页被分割成多个区域(cacheline block)。区域划分后的数据库缓存页,其结构如图1所示,包括页头和页尾,其中,

页头包括:checksum、lower、upper、linp,其中,

checksum:数据校验值;

lower:页内空闲空间下限;

upper:页内空闲空间上限;

linp:页内记录的指针数组。

页尾包括:prepage、nextpage,其中,

prepage:前一页页号;

nextpage:后一页页号。

本发明实施例中,对缓存页设置对应的页面描述符进行页面描述,包括,

tablespace id:表所在的表空间ID,即表文件存储路径;

database id: 表所在的数据库ID;

rel id:表的ID;

page id:PM上数据页页号;

cache line bitmap(bitmap表):标记缓存页中哪些cache line block变脏(区域被修改)。

描述符以数组的形式组织,数组下标即为内存中数据页页号。

在步骤303,修改缓存页中的记录,并调整upper指针及对应的linp数组。

本发明实施例中,调整upper指针调整upper指针,指向最后一个记录头部,该记录偏移为ptr,其中ptr为相对页首位置的偏移;调整对应linp数组,指向该记录。

在步骤304,查找修改的区域,修改页面描述符。

本发明实施例中,计算该记录位于哪个cache line block,并修改页描述符bitmap表对应的bit位为1:

dirty_cache_line=ptr%cache_line_block_size;

将第一个cache line block及第dirty_cache_line+1个 block对应的bitmap位置成1;

在步骤305,根据修改的页面描述符进行磁盘刷写。

本发明实施例中,刷写的步骤为:根据修改的页面描述符,将bitmap表对应bit位为1的cache line block以并行的的方式调用PMDK接口、以用户态的方式刷盘。

本发明实施例中,根据 CPU核数启动多条刷写进程,将各个cache line block均匀地分配到各个刷写进程,进行刷写。

在步骤306,刷盘完成后,再将页面描述符中bitmap表清0。

实施例2

图4为根据本发明的插入一条记录修改数据页并刷盘的流程图,下面将参考图4,对本发明的插入一条记录修改数据页并刷盘的流程进行详细描述。首先,在步骤401,将记录插入到缓存页的空闲区块。

本发明实施例中,是从缓存页的页尾向页头进行扫描,在缓存页空闲空间位置找到一个空闲空间,并插入记录。

在步骤402,调整upper指针和对应linp数组。

本发明实施例中,调整upper指针,指向最后一个记录头部,该记录偏移为ptr;调整对应lnp数组,指向该记录。

在步骤403,计算记录插入的位置,并修改页面描述符。

本发明实施例中,计算该记录位于哪个区域(cache line block),并修改页面描述符bitmap表对应的bit位为1:dirty_cache_line=ptr%cache_line_block_size;

将第一个cache line block及第dirty_cache_line+1个 block对应的bitmap位置成1。

在步骤404,根据修改的页面描述符,进行脏页刷盘。

将插入记录的区域对PM内存进行持久化刷写。

本发明实施例中,遍历所有页面描述符数组,将bitmap表对应bit位为1的cacheline block以并行的的方式调用PMDK接口以用户态的方式刷盘。

本发明实施例中,跳过操作系统内核态以避免内核态与用户态切换的额外消耗。

本发明实施例中,并发方式为,根据CPU核数启动多条刷写进程,将各个cacheline block均匀地分配到各个刷写进程,进行刷写。

在步骤405,持久化刷盘完成,对页面描述符清零。

刷盘持久化完成后,再将页面描述符中bitmap表清0。实施例3

图5为根据本发明的基于PM的数据库页缓存系统架构图,如图5所示,本发明的基于PM的数据库页缓存系统,包括,PM内存501、DRAM内存502、区域划分模块503、页面描述模块504,以及磁盘刷写模块505,其中,

PM内存501,其用于存储表文件。

本发明实施例中,PM内存501,其通过持久内存开发工具包PMDK,将表文件映射到DRAM内存502,接受磁盘刷写模块505指令,更新表文件。

DRAM内存502,其存储数据库缓存页及页面描述符,并根据磁盘刷写模块505指令,将修改的区域刷写到PM内存501。

区域划分模块503,其对数据库缓存页进行区域划分。

本发明实施例中,对数据库缓存页划分区域,包括,把每个缓存页划分成固定大小的区域, 其中,把区域大小设置为1个Cache Line,缓存页被分割成多个区域(cache lineblock)。

页面描述模块504,对缓存页设置对应的页面描述符。

本发明实施例中,页面描述模块504设置的页面描述符,包括,

tablespace id:表所在的表空间ID,即表文件存储路径;

database id: 表所在的数据库ID;

rel id:表的ID;

page id:PM上数据页页号;

cache line bitmap(bitmap表):标记缓存页中哪些cache line block变脏。

磁盘刷写模块505,其遍历页面描述符数组,控制DRAM内存,将修改的区域刷写到PM内存501中,进行持久化刷盘。

本发明实施例中,磁盘刷写模块505遍历页面描述符数组,将bitmap表对应bit位为1的cache line block以并行的的方式调用PMDK接口以用户态的方式刷盘。

本发明实施例中,跳过操作系统内核态以避免内核态与用户态切换的额外消耗。

本发明实施例中,并发方式为,根据CPU核数启动多条刷写进程,将各个cacheline block均匀地分配到各个刷写进程,进行刷写。

实施例4

图6为本发明的一个实施例电子设备的结构示意图,如图6所示,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器;至少1个PM等。当然,该电子设备还可能包括其他业务所需要的硬件。

处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。

存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。

处理器从非易失性存储器中读取对应的计算机程序到存储器中然后运行,在逻辑层面上形成共享资源访问控制装置。处理器,执行存储器所存放的程序,并具体用于执行以下操作:

对缓存页进行区域划分;

为区域划分后的缓存页设置对应的页面描述符;

获取修改区域,并修改所述页面描述符;

将所述修改区域刷写到PM内存。

实施例5

本发明实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被执行时,能够执行所述实施例的方法,并具体用于执行上述基于PM的数据库页缓存方法。

虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种应用于电子远传水表的EEPROM擦写平衡方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类