脏页刷新方法和装置、电子设备和存储介质与流程

文档序号:25182336发布日期:2021-05-25 14:57阅读:131来源:国知局
脏页刷新方法和装置、电子设备和存储介质与流程

本申请涉及数据处理领域,尤其涉及一种脏页刷新方法和装置、电子设备和存储介质。



背景技术:

如果磁盘数据库的数据页中的数据有修改时,则该数据页会被读取到内存中进行修改,内存中(bufferpool,缓冲池)未刷到磁盘的数据称为脏数据(dirtydata),即,脏页。脏页会被放到flushlist(脏页链表),以便进行刷盘。

在进行脏页刷盘时,可以通过数据库引擎的i/o(input/output,输入/输出)能力控制对flushlist刷脏页数量。以innodb(mysql的数据库引擎之一)为例,innodb_io_capacity参数的值越高,每次刷盘写入脏页的数量越多,数据刷脏页的i/o越高,其中,innodb_io_capacity定义了innodb后台任务每秒可用的i/o操作数(input/outputoperationspersecond,iops)。

如果脏页数量过多,刷盘速度很慢,在i/o能力允许的情况下,可以通过提高i/o能力(比如,调高innodb_io_capacity参数的值)来提高刷脏页的数量和频率。然而,通过提高刷脏页数量和频率来提高刷新脏页能力的方式,易引起大量i/o占用资源。



技术实现要素:

本申请提供了一种脏页刷新方法和装置、电子设备和存储介质,以至少解决相关技术中通过提高刷脏页数量和频率来提高刷新脏页能力的方式易引起大量i/o占用资源的问题。

根据本申请实施例的一个方面,提供了一种脏页刷新方法,包括:确定脏页链表中待刷新的目标脏页,其中,目标脏页是与目标磁盘中的第一数据页对应的脏页;从所述目标脏页的目标位置区域内读取第一目标数据,其中,所述目标位置区域为所述目标脏页相对所述第一数据页被修改的数据在所述目标脏页中所处的位置区域;将所述目标脏页的待刷新数据刷新到所述目标磁盘,以将所述第一数据页更新为第二数据页,其中,所述待刷新数据包括所述第一目标数据。

可选地,在从所述目标脏页的所述目标位置区域内读取所述第一目标数据之前,所述方法还包括:从所述目标脏页的页头内读取目标标识信息,其中,所述目标标识信息用于指示所述目标位置区域;根据所述目标标识信息,确定出所述目标位置区域。

可选地,在从所述目标脏页的所述目标位置区域内读取所述第一目标数据之前,所述方法还包括:获取与所述目标脏页对应的目标修改标识,其中,所述目标脏页按照目标大小被划分为多个数据块,所述目标修改标识用于指示所述目标脏页相对所述第一数据页被修改的数据所在的目标数据块;将所述目标修改标识所指示的所述目标数据块所在的位置区域,确定为所述目标位置区域。

可选地,在获取与目标脏页对应的所述目标修改标识之后,所述方法还包括:确定所述目标修改标识的多个标志位中值为目标值的目标标志位,其中,所述多个标志位与所述多个数据块一一对应,值为所述目标值的标志位用于指示对应的数据块有修改;将与所述目标标志位对应的数据块,确定为所述目标数据块。

可选地,在确定所述脏页链表中待刷新的所述目标脏页之前,所述方法还包括:确定与目标修改数据对应的目标起始位置和目标结束位置,其中,所述目标修改数据为所述目标脏页中的修改数据,所述目标起始位置为所述目标修改数据在所述目标脏页中的起始位置,所述目标结束位置为所述目标修改数据在所述目标脏页中的结束位置;确定所述目标起始位置所在的第一数据块和所述目标结束位置所在的第二数据块;将所述第一数据块到所述第二数据块的各个数据块对应的标志位的值配置为所述目标值。

可选地,在将所述目标脏页的所述待刷新数据刷新到所述目标磁盘之前,所述方法还包括:读取所述目标脏页的页头中的第二目标数据,其中,所述第二目标数据包含用于描述所述目标脏页的头信息;读取所述目标脏页的页尾中的第三目标数据,其中,所述第三目标数据包含用于对所述目标脏页进行校验的校验信息,所述待刷新数据还包括所述第二目标数据和所述第三目标数据。

可选地,将所述目标脏页的所述待刷新数据刷新到所述目标磁盘包括:通过目标写入模式将所述待刷新数据刷新到所述目标磁盘,其中,所述目标写入模式为绕过操作系统的写缓存直接向磁盘写入数据的模式。

根据本申请实施例的另一个方面,还提供了一种脏页刷新装置,包括:第一确定单元,用于确定脏页链表中待刷新的目标脏页,其中,所述目标脏页是与目标磁盘中的第一数据页对应的脏页;第一读取单元,用于从所述目标脏页的目标位置区域内读取第一目标数据,其中,所述目标位置区域为所述目标脏页相对所述第一数据页被修改的数据在所述目标脏页中所处的位置区域;刷新单元,用于将所述目标脏页的待刷新数据刷新到所述目标磁盘,以将所述第一数据页更新为第二数据页,其中,所述待刷新数据包括所述第一目标数据。

可选地,所述装置还包括:第二读取单元,用于在从所述目标脏页的所述目标位置区域内读取所述第一目标数据之前,从所述目标脏页的页头内读取目标标识信息,其中,所述目标标识信息用于指示所述目标位置区域;根据所述目标标识信息,确定出所述目标位置区域。

可选地,所述装置还包括:获取单元,用于在从所述目标脏页的所述目标位置区域内读取所述第一目标数据之前,获取与所述目标脏页对应的目标修改标识,其中,所述目标脏页按照目标大小被划分为多个数据块,所述目标修改标识用于指示所述目标脏页相对所述第一数据页被修改的数据所在的目标数据块;第二确定单元,用于将所述目标修改标识所指示的所述目标数据块所在的位置区域,确定为所述目标位置区域。

可选地,所述装置还包括:第三确定单元,用于在获取与所述目标脏页对应的所述目标修改标识之后,确定所述目标修改标识的多个标志位中值为目标值的目标标志位,其中,所述多个标志位与所述多个数据块一一对应,值为所述目标值的标志位用于指示对应的数据块有修改;第四确定单元,用于将与所述目标标志位对应的数据块,确定为所述目标数据块。

可选地,所述装置还包括:第五确定单元,用于在确定所述脏页链表中待刷新的所述目标脏页之前,确定与目标修改数据对应的目标起始位置和目标结束位置,其中,所述目标修改数据为所述目标脏页中的修改数据,所述目标起始位置为所述目标修改数据在所述目标脏页中的起始位置,所述目标结束位置为所述目标修改数据在所述目标脏页中的结束位置;第六确定单元,用于确定所述目标起始位置所在的第一数据块和所述目标结束位置所在的第二数据块;配置单元,用于将所述第一数据块到所述第二数据块的各个数据块对应的标志位的值配置为所述目标值。

可选地,所述装置还包括:第三读取单元,用于在将所述目标脏页的所述待刷新数据刷新到所述目标磁盘之前,读取所述目标脏页的页头中的第二目标数据,其中,所述第二目标数据包含用于描述所述目标脏页的头信息;第四读取单元,用于读取所述目标脏页的页尾中的第三目标数据,其中,所述第三目标数据包含用于对所述目标脏页进行校验的校验信息,所述待刷新数据还包括所述第二目标数据和所述第三目标数据。

可选地,所述刷新单元包括:刷新模块,用于通过目标写入模式将所述待刷新数据刷新到所述目标磁盘,其中,所述目标写入模式为绕过操作系统的写缓存直接向磁盘写入数据的模式。

根据本申请实施例的又一个方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器、通信接口和存储器通过通信总线完成相互间的通信;其中,存储器,用于存储计算机程序;处理器,用于通过运行所述存储器上所存储的所述计算机程序来执行上述任一实施例中的方法步骤。

根据本申请实施例的又一个方面,还提供了一种计算机可读的存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一实施例中的方法步骤。

在本申请实施例中,采用定位脏页中修改的数据部分进行落盘的方式,通过确定脏页链表中待刷新的目标脏页,其中,目标脏页是与目标磁盘中的第一数据页对应的脏页;从目标脏页的目标位置区域内读取第一目标数据,其中,目标位置区域为目标脏页相对第一数据页被修改的数据在目标脏页中所处的位置区域;将目标脏页的待刷新数据刷新到目标磁盘,以将第一数据页更新为第二数据页,其中,待刷新数据包括第一目标数据,由于在刷脏时通过读取修改的数据部分所在的位置区域中的数据进行落盘,可以减少非脏数据落盘,从而可以实现减少一次刷脏所刷新的数据量的目的,达到了减少刷脏对i/o资源的占用、提高脏页的刷新速度的技术效果,进而解决了相关技术中通过提高刷脏页数量和频率来提高刷新脏页能力的方式易引起大量i/o占用资源的问题。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是根据本申请实施例的一种可选的脏页刷新方法的硬件环境的示意图;

图2是根据本申请实施例的一种可选的脏页刷新方法的流程示意图;

图3是根据本申请实施例的一种可选的脏页刷新方法的示意图;

图4是根据本申请实施例的一种可选的脏页刷新方法的示意图;

图5是根据本申请实施例的另一种可选的脏页刷新方法的流程示意图;

图6是根据本申请实施例的一种可选的脏页刷新装置的结构框图;

图7是根据本申请实施例的一种可选的电子设备的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本申请实施例的一个方面,提供了一种脏页刷新方法。可选地,在本实施例中,上述脏页刷新方法可以应用于如图1所示的由终端102和服务器104所构成的硬件环境中。如图1所示,服务器104通过网络与终端102进行连接,可用于为终端或终端上安装的客户端提供服务,可在服务器上或独立于服务器设置数据库,用于为服务器104提供数据存储服务,还可以用于处理云服务。

上述网络包括但不限于以下至少之一:有线网络,无线网络。有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,无线网络可以包括但不限于以下至少之一:wifi(wirelessfidelity,无线保真)。终端102并不限定于pc(personalcomputer,个人计算机)、手机、平板电脑等。服务器104可以但不限于服务器或者服务器集群,也可以是云服务器或者云服务器集群,本实施例中对此不作限定。

本申请实施例的脏页刷新方法可以由服务器104来执行,也可以由终端102来执行,还可以是由服务器104和终端102共同执行。其中,终端102执行本申请实施例的脏页刷新方法也可以是由安装在其上的客户端来执行。

以由数据库服务器(数据库实例,服务器104的一种)来执行本实施例中的脏页刷新方法为例,图2是根据本申请实施例的一种可选的脏页刷新方法的流程示意图,如图2所示,该方法的流程可以包括以下步骤:

步骤s202,确定脏页链表中待刷新的目标脏页,其中,目标脏页是与目标磁盘中的第一数据页对应的脏页。

本实施例中的脏页刷新方法可以应用于将脏数据页(脏页)从内存刷新到磁盘的场景。数据库中可以存储有数据页,数据页被修改(更新)时,数据页可以先被载入到内存中,例如,内存中的缓冲池可以缓存从磁盘读取到内存的数据页。在内存中,数据页被修改之后会产生脏页。脏页是指在内存缓存区中已经被修改、但是还没有刷新到磁盘中的数据页。此时,数据库实例内存中的数据页和磁盘中的数据页的数据不一致。

数据库以mysql为例,mysql启动后缓冲池会初始化。缓冲池会初始化多个空白的缓存页,以及这些缓存页的描述信息会被组织成lru(leastrecentlyused,即最不经常使用)链表和freelist双向链表。如果从磁盘中读取一个数据页,会先从freelist中找出一个空闲缓存页的描述信息,然后将读出的数据页加载到找到的缓存页中。同时,将缓存页的描述信息从freelist中剔除,此外该描述信息块还会被维护进lru链表中。数据页被加载进缓冲池后就可以对其进行变更操作。

脏页链表(flushlist)也是由缓冲池中数据描述信息组织而成的双向链表,如果对内存中的缓冲页进行修改,该缓冲页对应的描述信息就会添加进flushlist。flushlist中的数据页中的数据和磁盘中的数据页的数据不一致,这种数据页叫做脏页。

可选地,在本实施例,脏页链表位于数据库服务器的目标内存(或者,目标缓冲池)中。脏页链表中的脏页不是立刻写入磁盘,而是由后台线程定时或者事件触发写入磁盘,例如,由刷脏程序(用于将脏页链表中的脏页刷新到磁盘的程序)定时将脏页链表中的脏页刷新到磁盘,可以是按照目标刷新周期(例如,2s)将脏页链表中的脏页刷新到磁盘。

在当前轮刷脏开始之后,可以依次从脏页链表中读取脏页作为当前待刷新的脏页。数据库服务器可以确定脏页链表中当前待刷新到目标磁盘的脏页,得到目标脏页。该目标脏页是与目标磁盘中的第一数据页对应的脏页,是脏页链表中待刷新的目标脏页。

确定目标脏页的方式可以有多种,例如,按照各个脏页的目标标记依次从脏页链表中确定出待刷新的脏页,目标标记用于指示数据页(脏页)第一次更新的重做日志(redolog)的lsn(logsequencenumber,日志序列号),本申请中对于从脏页链表中确定脏页的方式不作限定。

步骤s204,从目标脏页的目标位置区域内读取第一目标数据,其中,目标位置区域为目标脏页相对第一数据页被修改的数据在目标脏页中所处的位置区域。

如果一个数据页有修改,则成为脏页,相关技术中在进行刷脏时,需要把整个整页刷新到磁盘,造成了过多的i/o资源浪费。比如,磁盘中的脏页的大小为16k,如果仅有512字节范围内的数据修改,仍需要把整个页刷新到磁盘上,在磁盘上覆盖16k。

可选地,在本实施例中,通过精准定位修改的数据部分,单独落盘,减少非脏数据落盘,从而降低i/o资源的占用,减少i/o资源的浪费。数据库服务器可以首先确定目标脏页相对第一数据页被修改的数据在目标脏页中所处的位置区域,得到目标位置区域。数据页可以被修改一次或者多次,每次修改的位置可以是相同的,也可以是不同的,那么,目标位置区域可以是一个连续的区域,也可以是多个分散的区域,本实施例中对于目标位置区域不作具体限定,只要其能包含修改的数据部分即可。

在确定出目标位置区域之后,数据库服务器可以读取目标脏页的目标位置区域内的数据,得到第一目标数据,第一目标数据可以是目标脏页相对第一数据页被修改的数据,也包含比目标脏页相对第一数据页被修改的数据更多的内容。本实施例中对此不作限定。

步骤s206,将目标脏页的待刷新数据刷新到目标磁盘,以将第一数据页更新为第二数据页,其中,待刷新数据包括第一目标数据。

在读取到第一目标数据之后,数据库服务器可以控制对目标脏页进行刷盘,即,使用目标脏页更新第一数据页,从而得到第二数据页,刷脏策略可以是:把修改的部分落盘(必须落盘),未修改的部分不落盘(或者,尽量少落盘)。

目标脏页中需要刷新到目标磁盘的数据为待刷新数据,待刷新数据至少包含第一目标数据,也就是,修改的部分。此外,待刷新数据还可以包括包含其他信息,比如,目标脏页的管理信息,比如,脏页中的空闲区域,对脏页进行校验的校验信息等。

数据库服务器可以将待刷新数据刷新到目标磁盘,在刷盘时,数据库服务器可以定位出第一数据页中与待刷新数据对应的目标刷新位置,并将待刷新数据按照目标刷新位置刷新到目标磁盘。

目标刷新位置可以是待刷新数据的目标起始位置,将待刷新数据按照目标刷新位置进行刷新可以包括:以目标起始位置为起点将待刷新数据刷新到目标磁盘。如果待刷新数据有多个离散的子数据,目标刷新位置可以是包含各个子数据的起始位置,将待刷新数据按照目标刷新位置进行刷新可以包括:以各个子数据的起始位置为起点将各个子数据刷新到目标磁盘。

通过上述步骤s202至步骤s206,采用定位脏页中修改的数据部分进行落盘的方式,通过确定脏页链表中待刷新的目标脏页,其中,目标脏页是与目标磁盘中的第一数据页对应的脏页;从目标脏页的目标位置区域内读取第一目标数据,其中,目标位置区域为目标脏页相对第一数据页被修改的数据在目标脏页中所处的位置区域;将目标脏页的待刷新数据刷新到目标磁盘,以将第一数据页更新为第二数据页,其中,待刷新数据包括第一目标数据,解决了相关技术中通过提高刷脏页数量和频率来提高刷新脏页能力的方式易引起大量i/o占用资源的问题,减少了刷脏对i/o资源的占用,提高了脏页的刷新速度。

作为一种可选的实施例,在从目标脏页的目标位置区域内读取第一目标数据之前,上述方法还包括:

s11,从目标脏页的页头内读取目标标识信息,其中,目标标识信息用于指示目标位置区域;

s12,根据目标标识信息,确定出目标位置区域。

目标位置区域可以是根据目标标识信息确定的,目标标识信息可以用于指示目标位置区域。目标标识信息可以有一种或多种形式,例如,目标标识信息可以指示目标位置区域的起始位置和结束位置的位置坐标,位置坐标可以是相对于目标脏页的起始点的偏移,即,位置坐标可以是相对于目标脏页的起始点的相对地址,目标标识信息可以包括:目标位置区域的起始位置相对于目标脏页的起始点的第一相对地址,目标位置区域的结束位置相对于目标脏页的起始点的第二相对地址。

可选地,目标标识信息也可以是目标修改标识,目标脏页可以按照目标大小(比如,512b)被划分为多个数据块,目标修改标识用于指示目标脏页相对第一数据页被修改的数据所在的目标数据块。

目标标识信息可以存放在目标内存(或者,缓冲池)的一定存储空间内。可选地,为了提高内存空间的利用率,减少脏页刷盘对内存空间的占用,可以将目标标识信息存放在目标脏页的页头内。数据库服务器可以从目标脏页的页头内读取目标标识信息,并根据目标标识信息,确定出目标位置区域。

数据页的页头(或者说,表头)中可以定义许多头信息,其中可以预留一定的区间备用。目标标识信息可以写入到这样的预留空间中,即,目标标识信息存放在目标脏页的页头中的预留空间内。

通过本实施例,通过将用于指示修改的数据所在的位置区域的标识信息存放在目标脏页的页头中,可以减少脏页刷盘对内存空间的占用,提高内存空间的利用率。

作为一种可选的实施例,在从目标脏页的目标位置区域内读取第一目标数据之前,上述方法还包括:

s21,获取与目标脏页对应的目标修改标识,其中,目标脏页按照目标大小被划分为多个数据块,目标修改标识用于指示目标脏页相对第一数据页被修改的数据所在的目标数据块;

s22,将目标修改标识所指示的目标数据块所在的位置区域,确定为目标位置区域。

目标位置区域可以是根据目标修改标识确定的,目标脏页可以按照目标大小(比如,512b)被划分为多个数据块,目标脏页中被修改的数据可以位于多个数据块中的一个或多个数块中,目标修改标识可以用于指示目标脏页相对第一数据页被修改的数据所在的目标数据块,也就是,哪些数据块中的数据被修改。目标修改标识指示的方式可以是一一指示,即,指示各个数据块是否有修改,也可以仅指示特殊数据块,即,指示数据修改的起始数据块和结束数据块。如果起始数据块与结束数据块相同,可以通过特殊标记进行标记,或者,同一数据块指示两次。还可以是其他的指示方式,本实施例中对此不作限定。

例如,如图3所示,数据页可以按照512字节(一个扇区的大小,是机械磁盘最小单位,目标大小的一种示例)划分,一个16k的数据页可以被划分成32个数据块。每个块在页内的相对地址分别为:

[0,511],[512,1023],[1024,1535],[1536,2047];

[2048,2559],[2560,3071],[3072,3583],[3584,4095];

[4096,4607],[4608,5119],[5120,5631],[5632,6143];

[6144,6655],[6656,7167],[7168,7679],[7680,8191];

[8192,8703],[8704,9215],[9216,9727],[9728,10239];

[10240,10751],[10752,11263],[11264,11775],[11776,12287];

[12288,12799],[12800,13311],[13312,13823],[13824,14335];

[14336,14847],[14848,15359],[15360,15871],[15872,16383]。

这里,512字节和16k仅为一种示例,目标大小也可以是其他的大小,比如,1k,数据页的大小也可以是其他大小,比如,32k等等。

数据库服务器可以获取与目标脏页对应的目标修改标识,从而可以根据目标修改标识确定出目标脏页相对第一数据页被修改的数据所在的目标数据块,目标数据块的数量可以为一个或多个。不同的数据块对应于不同的位置区域,数据库服务器可以根据数据块与位置区域的对应关系,确定目标位置区域。

例如,结合图3,如果目标修改标识指示修改的数据位于第11个数据块上,那么,按照数据块和存储的位置区域(在目标脏页中的相对地址)之间的对应关系,可以确定第11个数据块的位置区域为:[5120,5631]。

通过本实施例,通过将脏页划分成多个数据块、并通过修改标识指示修改的数据所在的数据块,可以减少存储标记信息所需的存储空间,提高内存空间的利用效率。

作为一种可选的实施例,在获取与目标脏页对应的目标修改标识之后,上述方法还包括:

s31,确定目标修改标识的多个标志位中值为目标值的目标标志位,其中,多个标志位与多个数据块一一对应,值为目标值的标志位用于指示对应的数据块有修改;

s32,将与目标标志位对应的数据块,确定为目标数据块。

为了能够准确标记出修改的数据所在的数据块,可以标志位来标记数据块的数据是否被修改,一个标志位可以用于标记一个数据块,标志位的不同值可以用于指示数据块(中的数据)是否有修改,其中,值为目标值的标志位用于指示对应的数据块有修改。

例如,在数据页头定义一个区间存放修改标志。如果有32个块,可用4个字节存放,数据块可以用位标识,每个位默认为0。如果数据块中的数据有修改,则对应的位修改1。

为了确定目标数据块,数据库服务器可以首先确定目标修改标识的多个标志位中值为目标值的目标标志位,然后将与目标标志位对应的数据块,确定为目标数据块。比如,第3、11个标志位为1,则可以确定修改数据所在的数据块为:第2个数据块和第10个数据块。

通过本实施例,通过标志位来标记修改数据所在的数据块,可以提高数据块确定的准确性和便捷性(无需复杂的判断逻辑)。

作为一种可选的实施例,在确定脏页链表中待刷新的目标脏页之前,上述方法还包括:

s41,确定与目标修改数据对应的目标起始位置和目标结束位置,其中,目标修改数据为目标脏页中的修改数据,目标起始位置为目标修改数据在目标脏页中的起始位置,目标结束位置为目标修改数据在目标脏页中的结束位置;

s42,确定目标起始位置所在的第一数据块和目标结束位置所在的第二数据块;

s43,将第一数据块到第二数据块的各个数据块对应的标志位的值配置为目标值。

为了保证标志位能够准确指示对应的数据块中的数据是否被修改,可以根据数据块是否被修改来更新数据块对应的标志位。当目标脏页中的数据有修改时,可以更新修改数据所在的数据块对应的标志位。数据库服务器可以确定与目标修改数据对应的目标起始位置和目标结束位置,目标修改数据是目标脏页中的修改数据。这里的目标起始位置是目标修改数据在目标脏页中的起始位置,目标结束位置为目标修改数据是目标脏页中的结束位置,也就是说,从目标起始位置到目标结束位置的数据被修改。

目标修改数据可以有多种方式,即,数据页中的数据修改有多种形式。可以包括但不限于:写入,删除。写入又可以分为插入和更新等。

例如,目标修改数据(目标写入数据)可以是写入到目标脏页中的数据。对应地,目标起始位置为目标写入数据写入到目标脏页中的起始位置,目标结束位置为目标写入数据写入到目标脏页中的结束位置。目标写入数据从目标起始位置开始写入,一直写到目标结束位置。

目标写入数据可以是插入到目标脏页中的数据,也可以是用于更新目标脏页中原有数据的新数据。目标写入数据可以是第一个写入到目标脏页中的数据,可以理解为:将目标写入数据写入到缓冲池中第一数据页的副本,得到目标脏页。目标写入数据可以不是第一个写入到目标脏页中的数据,可以理解为:将目标写入数据写入到脏页链表中的目标脏页,从而得到更新后的目标脏页。

又例如,目标修改数据(目标删除数据)也可以是从目标脏页中删除的数据。对应地,目标起始位置为目标删除数据在目标脏页中删除的起始位置(开始删除的位置),目标结束位置为目标删除数据在目标脏页中删除的结束位置。目标删除数据从目标起始位置开始删除,一直删除目标结束位置。

目标起始位置和目标终点位置可以通过在目标脏页中的相对地址表示。对应地,目标起始位置为目标起始地址,是目标修改数据在目标脏页中的起始地址,目标结束位置为目标结束地址,是目标修改数据在目标脏页中的结束地址。

数据库服务器可以根据目标起始位置和目标大小确定目标起始位置所在的第一数据块,并根据目标结束位置和目标大小确定目标结束位置所在的第二数据块。数据块的序号编写方式不同,根据目标起始位置和目标大小确定第一数据块、以及根据目标结束位置和目标大小确定第二数据块的方式也会存在区别。

例如,数据块从0开始编号,脏页中的相对地址也从0开始编号,可以将目标起始地址(从0开始)除以目标大小所得到的值向下取整,作为第一数据块的数据块标识,将目标结束地址之后除以目标大小所得到的值向下取整,作为第二数据块的数据块标识。

又例如,数据块从1开始编号,脏页中的相对地址也从1开始编号,可以将目标起始地址除以目标大小所得到的值向上取整,作为第一数据块的数据块标识;将目标结束地址除以目标大小所得到的值向上取整,作为第二数据块的数据块标识。

对于确定出的第一数据块和第二数据块,数据库服务器可以将第一数据块到第二数据块的各个数据块对应的标志位的值配置为目标值:如果两者为同一数据块,那么,可以将该数据块所对应的标志位的值配置为目标值;如果两者为相邻的数据块,那么,可以将两个数据块所对应的标志位的值均配置为目标值;如果两者为不相邻的两个数据块,那么,可以将这两个数据块以及两个数据块之间的数据块所对应的标志位的值均配置为目标值。

例如,当有数据insert(插入)时,可以把数据的起始位置与结尾位置(相对于页的位置)分别与512求余,得到余数按照位运算,修改表头的标志位,把对应的位修改为1。当有数据更新时,可以把修改数据的起始位置与结尾位置(相对于页的位置)分别与512求余,得到余数按照位运算,修改表头的标志位,把对应的位修改为1。

示例性地,脏页中待写入数据写入的相对地址为(5220,5340),长度为120,通过512相除得到(10,10),即该数据写入到第11个数据块中的位置,坐标为(5120,5631),即要修改的地址为(5120,5631)。当脏页落盘时,定位到5120的相对位置,写入512字节的数据,防止写整个页。

通过本实施例,通过更新数据写入位置所在的数据块对应的标志位,可以保证标志位能够准确指示对应的数据块中的数据是否被修改。

作为一种可选的实施例,在将目标脏页的待刷新数据刷新到目标磁盘之前,上述方法还包括:

s51,读取目标脏页的页头中的第二目标数据,其中,第二目标数据包含用于描述目标脏页的头信息;

s52,读取目标脏页的页尾中的第三目标数据,其中,第三目标数据包含用于对目标脏页进行校验的校验信息,待刷新数据还包括第二目标数据和第三目标数据。

为了保证数据写入的准确性以及数据的安全性,可以在每次刷新时均刷新脏页的管理信息和校验信息。在数据页的页头中可以包含许多头信息,这些信头信息可以包含脏页的管理信息,比如,有哪些空闲数据块等。数据库服务器可以控制目标脏页的页头中的数据每次都落盘。在数据页的页尾中可以包含校验信息,校验信息可以是对目标脏页进行校验的信息。数据库服务器可以控制目标脏页的页尾中的数据每次都要落盘。

为了得到待刷新数据,除了第一目标数据外,服务器还可以读取目标脏页的页头中的数据,得到第二目标数据,以及读取目标脏页的页尾中的数据,得到第三目标数据。待刷新数据包含:第一目标数据、第二目标数据和第三目标数据。

对于将脏页按照目标大小进行分块的场景,目标脏页的页头可以为目标脏页的第一个数据块,目标脏页的页尾可以为目标脏页的最后一个数据块,那么,数据库服务器可以读取目标脏页的第一个数据块,得到第二目标数据,读取目标脏页的最后一个数据块,得到第三目标数据。

通过本实施例,每次脏页刷新均刷新脏页的头信息和校验信息,可以保证数据的安全性和可靠性。

作为一种可选的实施例,将目标脏页的待刷新数据刷新到目标磁盘包括:

s61,通过目标写入模式将待刷新数据刷新到目标磁盘,其中,目标写入模式为绕过操作系统的写缓存直接向磁盘写入数据的模式。

在内存中,脏页存放在应用缓存中的。按照相关技术中所提供的刷脏方案,在将目标脏页刷新到目标磁盘中时,需要先将待刷新数据从应用缓存写入到操作系统缓存(操作系统的写缓存)中,然后在将待刷新数据从操作系统缓存写入到目标磁盘。

例如,如图4所示,待写入数据存放在内存a区(应用缓存)中,在进行刷脏时,待写入数据首先从内存a区写入到内存b区(操作系统缓存),再由内存b区写入到目标磁盘。

可选地,在本实施例中,数据库服务器可以通过目标写入模式将待刷新数据刷新到目标磁盘,目标写入模式是绕过操作系统的写缓存直接向磁盘写入数据的模式。结合图4,待刷新数据直接由内存a区写入到目标磁盘中,而不经过内存b区。

目标写入模式可以是通过o_direct标志来标识的。比如,如果o_direct为1,表示不用操作系统写缓存,直接将数据写入到磁盘,可以节约占用的内存空间。如果o_direct为0,表示用操作系统写缓存,由操作系统缓存将数据写入到磁盘。

通过本实施例,通过绕过操作系统的写缓存直接向磁盘写入数据,可以减少刷盘对于内存空间的占用,提高资源的利用率。

下面结合可选示例对本申请实施例中的脏页刷新方法进行解释说明。在本示例中,在页头标记修改的数据部分,刷脏时把修改的部分落盘,未修改的部分不落盘,由整页落盘,修改为按扇区落盘,从而达到降低i/o的目的。

如图5所示,本可选示例中的脏页刷新方法的流程可以包括以下步骤:

步骤s502,当有数据修改时,把修改数据的起始位置与结尾位置分别与512求余,得到余数按照位运算,修改表头的标志位,把对应的位修改为1。

把数据页按照512字节划分成块,即,数据块。16k大小的数据也可以被划分成32个数据块。在数据页的页头中可以定义一个区间存放修改标志。有32个数据块,可以用4个字节存放,数据块用位标识,每个位默认为0,如果数据块有修改,则对应的位修改为1。

当有数据插入、数据更新、或者数据删除时,数据库服务器可以把修改数据的起始位置与结尾位置(相对于页的位置)分别与512求余,得到余数按照位运算,修改表头的标志位,把对应的位修改为1。

步骤s504,当刷脏程序运行时,刷新flushlist链表,先读取脏页页头的标志位,把标记位为1的块(512字节)读取出来,依次写入磁盘。

刷脏程序可以定时运行,以将flushlist中的脏页刷新到磁盘。对于flushlist中的一个脏页,可以首先读取脏页页头中的标志位,将标志位为1的数据块读取出来;同时,脏页的第一个数据块和最后一个数据块也会被读取出来,读取的数据块可以依次写入到磁盘。

通过本示例,通过精准定位脏页中修改的数据部分,单独进行落盘,可以减少非脏数据落盘,降低i/o资源的占用。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom(read-onlymemory,只读存储器)/ram(randomaccessmemory,随机存取存储器)、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。

根据本申请实施例的另一个方面,还提供了一种用于实施上述脏页刷新方法的脏页刷新装置。图6是根据本申请实施例的一种可选的脏页刷新装置的结构框图,如图6所示,该装置可以包括:

第一确定单元602,用于确定脏页链表中待刷新的目标脏页,其中,目标脏页是与目标磁盘中的第一数据页对应的脏页;

第一读取单元604,与第一确定单元602相连,用于从目标脏页的目标位置区域内读取第一目标数据,其中,目标位置区域为目标脏页相对第一数据页被修改的数据在目标脏页中所处的位置区域;

刷新单元606,与第一读取单元604相连,用于将目标脏页的待刷新数据刷新到目标磁盘,以将第一数据页更新为第二数据页,其中,待刷新数据包括第一目标数据。

需要说明的是,该实施例中的第一确定单元602可以用于执行上述步骤s202,该实施例中的第一读取单元604可以用于执行上述步骤s204,该实施例中的刷新单元606可以用于执行上述步骤s206。

通过上述模块,采用定位脏页中修改的数据部分进行落盘的方式,通过确定脏页链表中待刷新的目标脏页,其中,目标脏页是与目标磁盘中的第一数据页对应的脏页;从目标脏页的目标位置区域内读取第一目标数据,其中,目标位置区域为目标脏页相对第一数据页被修改的数据在目标脏页中所处的位置区域;将目标脏页的待刷新数据刷新到目标磁盘,以将第一数据页更新为第二数据页,其中,待刷新数据包括第一目标数据,解决了相关技术中通过提高刷脏页数量和频率来提高刷新脏页能力的方式易引起大量i/o占用资源的问题,减少了刷脏对i/o资源的占用,提高了脏页的刷新速度。

作为一种可选的实施例,上述装置还包括:

第二读取单元,用于在从目标脏页的目标位置区域内读取第一目标数据之前,从目标脏页的页头内读取目标标识信息,其中,目标标识信息用于指示目标位置区域;

根据目标标识信息,确定出目标位置区域。

作为一种可选的实施例,上述装置还包括:

获取单元,用于在从目标脏页的目标位置区域内读取第一目标数据之前,获取与目标脏页对应的目标修改标识,其中,目标脏页按照目标大小被划分为多个数据块,目标修改标识用于指示目标脏页相对第一数据页被修改的数据所在的目标数据块;

第二确定单元,用于将目标修改标识所指示的目标数据块所在的位置区域,确定为目标位置区域。

作为一种可选的实施例,上述装置还包括:

第三确定单元,用于在获取与目标脏页对应的目标修改标识之后,确定目标修改标识的多个标志位中值为目标值的目标标志位,其中,多个标志位与多个数据块一一对应,值为目标值的标志位用于指示对应的数据块有修改;

第四确定单元,用于将与目标标志位对应的数据块,确定为目标数据块。

作为一种可选的实施例,上述装置还包括:

第五确定单元,用于在确定脏页链表中待刷新的目标脏页之前,确定与目标修改数据对应的目标起始位置和目标结束位置,其中,目标修改数据为目标脏页中的修改数据,目标起始位置为目标修改数据在目标脏页中的起始位置,目标结束位置为目标修改数据在目标脏页中的结束位置;

第六确定单元,用于确定目标起始位置所在的第一数据块和目标结束位置所在的第二数据块;

配置单元,用于将第一数据块到第二数据块的各个数据块对应的标志位的值配置为目标值。

作为一种可选的实施例,上述装置还包括:

第三读取单元,用于在将目标脏页的待刷新数据刷新到目标磁盘之前,读取目标脏页的页头中的第二目标数据,其中,第二目标数据包含用于描述目标脏页的头信息;

第四读取单元,用于读取目标脏页的页尾中的第三目标数据,其中,第三目标数据包含用于对目标脏页进行校验的校验信息,待刷新数据还包括第二目标数据和第三目标数据。

作为一种可选的实施例,刷新单元606包括:

刷新模块,用于通过目标写入模式将待刷新数据刷新到目标磁盘,其中,目标写入模式为绕过操作系统的写缓存直接向磁盘写入数据的模式。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。

根据本申请实施例的又一个方面,还提供了一种用于实施上述脏页刷新方法的电子设备,该电子设备可以是服务器、终端、或者其组合。

图7是根据本申请实施例的一种可选的电子设备的结构框图,如图7所示,包括处理器702、通信接口704、存储器706和通信总线708,其中,处理器702、通信接口704和存储器706通过通信总线708完成相互间的通信,其中,

存储器706,用于存储计算机程序;

处理器702,用于执行存储器706上所存放的计算机程序时,实现如下步骤:

s1,确定脏页链表中待刷新的目标脏页,其中,目标脏页是与目标磁盘中的第一数据页对应的脏页;

s2,从目标脏页的目标位置区域内读取第一目标数据,其中,目标位置区域为目标脏页相对第一数据页被修改的数据在目标脏页中所处的位置区域;

s3,将目标脏页的待刷新数据刷新到目标磁盘,以将第一数据页更新为第二数据页,其中,待刷新数据包括第一目标数据。

可选地,在本实施例中,上述的通信总线可以是pci(peripheralcomponentinterconnect,外设部件互连标准)总线、或eisa(extendedindustrystandardarchitecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子设备与其他设备之间的通信。

存储器可以包括ram,也可以包括非易失性存储器(non-volatilememory),例如,至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。

作为一种示例,上述存储器706中可以但不限于包括上述脏页刷新装置中的第一确定单元602、第一读取单元604以及刷新单元606。此外,还可以包括但不限于上述脏页刷新装置中的其他模块单元,本示例中不再赘述。

上述处理器可以是通用处理器,可以包含但不限于:cpu(centralprocessingunit,中央处理器)、np(networkprocessor,网络处理器)等;还可以是dsp(digitalsignalprocessing,数字信号处理器)、asic(applicationspecificintegratedcircuit,专用集成电路)、fpga(field-programmablegatearray,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

本领域普通技术人员可以理解,图7所示的结构仅为示意,实施上述脏页刷新方法的设备可以是终端设备,该终端设备可以是智能手机(如android手机、ios手机等)、平板电脑、掌上电脑以及移动互联网设备(mobileinternetdevices,mid)、pad等终端设备。图7其并不对上述电子设备的结构造成限定。例如,电子设备还可包括比图7中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图7所示的不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、rom、ram、磁盘或光盘等。

根据本申请实施例的又一个方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行本申请实施例中上述任一项脏页刷新方法的程序代码。

可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

s1,确定脏页链表中待刷新的目标脏页,其中,目标脏页是与目标磁盘中的第一数据页对应的脏页;

s2,从目标脏页的目标位置区域内读取第一目标数据,其中,目标位置区域为目标脏页相对第一数据页被修改的数据在目标脏页中所处的位置区域;

s3,将目标脏页的待刷新数据刷新到目标磁盘,以将第一数据页更新为第二数据页,其中,待刷新数据包括第一目标数据。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例中对此不再赘述。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、rom、ram、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1