CN114936215A - 一种预写式日志的处理方法、存储介质与设备 - Google Patents
一种预写式日志的处理方法、存储介质与设备 Download PDFInfo
- Publication number
- CN114936215A CN114936215A CN202210641104.5A CN202210641104A CN114936215A CN 114936215 A CN114936215 A CN 114936215A CN 202210641104 A CN202210641104 A CN 202210641104A CN 114936215 A CN114936215 A CN 114936215A
- Authority
- CN
- China
- Prior art keywords
- written log
- transaction
- wal
- record
- written
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003672 processing method Methods 0.000 title claims abstract description 46
- 238000000034 method Methods 0.000 claims abstract description 43
- 238000011010 flushing procedure Methods 0.000 claims abstract description 11
- 230000001680 brushing effect Effects 0.000 claims description 56
- 230000008569 process Effects 0.000 claims description 25
- 230000000903 blocking effect Effects 0.000 claims description 10
- 230000010076 replication Effects 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 abstract description 7
- 238000012545 processing Methods 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 7
- 238000013507 mapping Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据库技术,特别是涉及一种预写式日志的处理方法、存储介质与设备。该处理方法包括:将数据库运行中产生的多条WAL记录复制到WAL缓存中;利用预先构建的哈希表记录多条WAL的复制状态,其中,哈希表的每一个哈希桶内记录有和其对应的WAL记录的识别号以及标示着是否完成复制的标记;在将WAL缓存刷写到磁盘文件中之前,根据待提交事务的每一条WAL记录的识别号查找和其对应的哈希桶,根据查找到的哈希桶中的标记顺序查看待提交事务的每一条WAL记录的复制状态。本发明采用哈希表记录WAL记录复制到WAL缓存的状态,实现了在刷写WAL缓存之前,无需遍历,仅仅通过哈希索引即可有序、快速地查看待提交事务的每一条WAL记录的复制状态,提高了数据库的性能。
Description
技术领域
本发明涉及数据库技术,特别是涉及一种预写式日志的处理方法、存储介质与设备。
背景技术
在数据库系统中,预写式日志(Write-Ahead Logging,WAL)技术是保证事务具有原子性和持久性的关键技术。数据库系统会将所有事务对数据库的所有更新操作均记录并在其被应用前写入日志文件。正由于WAL技术的作用,数据库需要在事务提交前将相关的WAL统一刷写到磁盘中,确保数据库崩溃时,数据库系统可以重做或撤销。现在数据库系统的WAL已经成为数据库系统的一大瓶颈。
现有的WAL技术通常采用数组结构的方法,来记录WAL复制到缓存的状态。这种方法允许一定的并发复制,在复制的同时利用数组记录WAL复制到缓存的状态。在事务提交时,阻塞复制进程,遍历数组,查看物理位置在当前提交事务之前,当前提交事务的WAL是否都已经完成复制。如果均完成复制,则顺序的将它们刷写到磁盘。如果存在一条未拷贝的WAL记录,则需要停止阻塞复制进程,保持事务未提交状态不变,直至等到当前提交事务的WAL的记录均完成复制后,才能继续刷写。
然而,在现有的采用数组结构记录WAL复制到缓存的状态的WAL技术中,由于数组结构对WAL复制和遍历刷写过程存在制约关系,会出现复制过程无法采用高并发的问题。另外,由于数组结构在刷写WAL时会采用无顺序的方式,因此需要遍历全部数组,导致遍历刷写过程代价大。以上可见,传统方法对WAl的处理存在弊端。
发明内容
鉴于上述问题,本发明提供一种预写式日志的处理方法、存储介质与设备。
本发明的一个目的是要提供一种可以无需遍历、快速地查看WAL复制情况的预写式日志的处理方法。
本发明一个进一步的目的是提高查看待提交事务的每一条WAL记录的复制状态的准确性,从而提高数据库管理系统的整体性能。
本发明的另一个进一步的目的是要一次性将尽可能多的WAL缓存刷写到磁盘文件中,提升WAL刷写效率。
特别地,本发明提供了一种预写式日志的处理方法,其包括:
将数据库运行中产生的多条预写式日志记录复制到预写式日志缓存中;
利用数据库管理系统中预先构建的哈希表记录多条预写式日志的复制状态,其中,哈希表的每一个哈希桶与一条预写式日志记录对应设置,并且每一个哈希桶内记录有和其对应的预写式日志记录的识别号以及标示着该条预写式日志记录是否完成复制的标记;
在将预写式日志缓存刷写到磁盘文件中之前,根据待提交事务的每一条预写式日志记录的识别号在哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的标记顺序查看待提交事务的每一条预写式日志记录的复制状态。
可选地,每一条预写式日志记录的识别号包括该条预写式日志记录的写入磁盘文件的起始地址和结束地址,其中,每个待提交事务的非首条预写式日志记录的起始地址为同一待提交事务的上一条预写式日志记录的结束地址与预设长度之和;并且
根据待提交事务的每一条预写式日志记录的识别号在哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的标记顺序查看待提交事务的每一条预写式日志记录的复制状态的步骤包括:
将待提交事务的第一条预写式日志记录的结束地址与预设长度相加得到待提交事务的下一条预写式日志记录的起始地址;
将下一条预写式日志记录的起始地址作为哈希表的索引,查找与下一条预写式日志记录对应的哈希桶,并根据查找到的哈希桶中的标记查看下一条预写式日志记录的复制状态;
在下一条预写式日志记录否完成复制的情况下,将下一条预写式日志记录的结束地址与预设长度的相加作为哈希表的索引,继续查找与下一条预写式日志记录对应的哈希桶,直至确定下一条预写式日志记录未完成复制,停止查找。
可选地,在将预写式日志缓存刷写到磁盘文件中之前,处理方法还包括:
在确定准备提交待提交事务的情况下,确定待提交事务的预写式日志的刷写进度;
在刷写进度为刷写中的情况下,将待提交事务的第一条预写式日志记录的起始地址作为刷写起始地址;并且
在根据待提交事务的每一条预写式日志记录的识别号在哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的标记顺序查看待提交事务的每一条预写式日志记录的复制状态的步骤之后,处理方法还包括:
将待提交事务的最后一条完成复制的预写式日志记录的结束地址作为刷写结束地址;
将刷写起始地址和刷写结束地址之间的整块预写式日志缓存刷写到磁盘文件中。
可选地,确定待提交事务的预写式日志的刷写进度的步骤包括:
获取预写式日志缓存的刷写位置,并获取待提交事务的请求位置,其中请求位置包括待提交事务的第一条预写式日志记录的起始地址和最后一条预写式日志记录的结束地址;
将刷写位置与请求位置和进行比对;
根据比对结果得到待提交事务的预写式日志的刷写进度。
可选地,根据比对结果得到待提交事务的日志刷写进度的步骤包括:
当刷写位置大于请求位置中的结束地址时,确定待提交事务的预写式日志的刷写进度为刷写完成;
当刷写位置小于请求位置中的起始地址时,确定待提交事务的预写式日志的刷写进度为未开始刷写;
当刷写位置等于请求位置中的起始地址时,确定待提交事务的预写式日志的刷写进度为刷写中。
可选地,在确定待提交事务的预写式日志的刷写进度的步骤之前,处理方法还包括:
申请刷写锁,并阻塞复制进程;并且
在确定待提交事务的预写式日志的刷写进度的步骤之后,处理方法还包括:
在刷写进度为未开始刷写的情况下,释放刷写锁,并停止阻塞复制进程,直至预写式日志缓存的刷写位置改变,再次申请刷写锁,并重新确定刷写进度;
在刷写进度为刷写完成的情况下,释放刷写锁,提交待提交事务。
可选地,在将数据库运行中产生的多条预写式日志记录复制到预写式日志缓存中的步骤之前,处理方法还包括:
通过预写式日志管理器分别为数据库运行中产生的多条预写式日志记录中的每一条预写式日志记录申请一个写入磁盘文件的起始地址,并将每一条预写式日志的起始地址与该条预写式日志的长度相加得到该条预写式日志的结束地址。
可选地,利用数据库管理系统中预先构建的哈希表记录多条预写式日志的复制状态的步骤包括:
分别将每一条预写式日志记录的起始地址作为哈希表的索引,在哈希表中查找与每一条预写式日志记录对应的哈希桶;
将每一条预写式日志记录的起始地址和结束地址分别记录到和其相对应的哈希桶中,并在每一条预写式日志记录复制到预写式日志缓存中之后,将标示着该条预写式日志记录完成复制的标记记录到和其相对应的哈希桶中。
根据本发明的另一个方面,还提供了一种机器可读存储介质,其上存储有机器可执行程序,机器可执行程序被处理器执行时实现上述任一种的处理方法。
根据本发明的又一个方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的机器可执行程序,并且处理器执行机器可执行程序时实现上述任一种的处理方法。
本发明的处理方法,通过将数据库运行中产生的多条WAL记录复制到WAL缓存中,并利用数据库管理系统中预先构建的哈希表记录多条WAL的复制状态,其中,哈希表的每一个哈希桶与一条WAL记录对应设置,并且每一个哈希桶内记录有和其对应的WAL记录的识别号以及标示着该条WAL记录是否完成复制的标记,实现了利用哈希表的结构特点顺序地记录每一条WAL记录复制到WAL缓存的状态。在此基础上,本发明的处理方法通过在将WAL缓存刷写到磁盘文件中之前,根据待提交事务的每一条WAL记录的识别号在哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的标记顺序查看待提交事务的每一条WAL记录的复制状态,实现了利用哈希表有序、快速地查看待提交事务的每一条WAL记录的复制情况,无需遍历,从而提升了数据库管理系统的性能。
进一步地,在本发明的处理方法中,每一条WAL记录的识别号包括该条WAL记录的写入磁盘文件的起始地址和结束地址,其中,每个待提交事务的非首条WAL记录的起始地址为同一待提交事务的上一条WAL记录的结束地址与预设长度之和,实现了在保证根据每一条WAL记录的结束地址可以方便快捷地找到下一条WAL记录的同时,前后两条WAL记录的识别号不会存在重复,保证了与在哈希表的物理位置上前后排布的两个哈希桶对应的识别号不会存在重复,提高了根据查找到的哈希桶中的标记顺序查看待提交事务的每一条WAL记录的复制状态的准确性,从而进一步提高了数据库管理系统的整体性能。
另外,本发明的处理方法通过在确定准备提交待提交事务的情况下,直接确定待提交事务的WAL的刷写进度,并通过在刷写进度为刷写中的情况下,将待提交事务的第一条WAL记录的起始地址作为刷写起始地址,将待提交事务的最后一条完成复制的WAL记录的结束地址作为刷写结束地址,继而将刷写起始地址和刷写结束地址之间的整块WAL缓存刷写到磁盘文件中,实现了一次性将尽可能多的WAL缓存刷写到磁盘文件中,提升了WAL刷写效率。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:
图1是根据本发明一个实施例的处理方法的流程示意图;
图2是根据本发明一个实施例的处理方法中哈希函数的结构示意图;
图3是根据本发明又一个实施例的处理方法的流程示意图;
图4是根据本发明一个实施例的机器可读存储介质的结构示意图;以及
图5是根据本发明一个实施例的计算机设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本发明的范围完整的传达给本领域的技术人员。
为解决上述技术问题,本发明实施例提出一种预写式日志的处理方法。图1是根据本发明一个实施例的处理方法的流程示意图。参见图1所示,该处理方法一般性地可包括:
步骤S102,将数据库运行中产生的多条预写式日志记录复制到预写式日志缓存中;
步骤S104,利用数据库管理系统中预先构建的哈希表记录多条预写式日志的复制状态,其中,哈希表的每一个哈希桶与一条预写式日志数据对应设置,并且每一个哈希桶内记录有和其对应的预写式日志记录的识别号以及标示着该条预写式日志记录是否完成复制的标记;
步骤S106,在将预写式日志缓存刷写到磁盘文件中之前,根据待提交事务的每一条预写式日志记录的识别号在哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的标记顺序查看待提交事务的每一条预写式日志记录的复制状态。
需要说明的是,WAL是数据领域数据库中一种高效的日志算法,对于非内存数据库而言,磁盘I/O操作是数据库效率的一大瓶颈。在相同的数据量下,采用WAL日志的数据库系统在事务提交时,磁盘写操作只有传统的回滚日志的一半左右,大大提高了数据库磁盘I/O操作的效率,从而提高了数据库的性能。
本发明采用哈希表替代传统方法中的数组(表)结构,来记录每一条WAL记录复制到WAL缓存的状态。需要说明的是,hash(哈希,也叫散列、杂凑)是把任意长度的输入(又叫做预映射pre-image)通过hash算法(也叫散列算法)变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是说,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说,hash就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。哈希表(Hash table,也叫散列表)是一种用于存放记录、并可以通过把关键码值(Key value)映射到表中一个位置来访问记录的数据结构。哈希桶(Hash bucket)是通过哈希函数从哈希表找到的某个位置,每条WAL记录可存放在一个哈希桶中。在此基础上,本发明采用预先配置的哈希表,记录WAL复制到缓存的状态,可以通过把每个Key value映射到哈希表中相对应的一个哈希桶中来访问该哈希桶中存放的WAL记录,以加快查找WAL记录的速度。
使用本发明的处理方法,将数据库运行中产生的多条WAL记录复制到WAL缓存中,并利用数据库管理系统中预先构建的哈希表记录多条WAL的复制状态,其中,哈希表的每一个哈希桶与一条WAL记录对应设置,并且每一个哈希桶内记录有和其对应的WAL记录的识别号以及标示着该条WAL记录是否完成复制的标记,实现了利用哈希表的结构特点顺序地记录每一条WAL记录复制到WAL缓存的状态,而且仅需将哈希表设置的足够大也可以在一定程度上将复制的并发提高,同时也并不会对后续的刷写带来明显的压力。在此基础上,本发明的处理方法通过在将WAL缓存刷写到磁盘文件中之前,根据待提交事务的每一条WAL记录的识别号在哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的标记顺序查看待提交事务的每一条WAL记录的复制状态,实现了利用哈希表有序、快速地查看待提交事务的每一条WAL记录的复制情况,无需遍历,从而提升了数据库管理系统的性能。
图2是根据本发明一个实施例的处理方法中哈希函数的结构示意图。参见图2所示,在本实施例中,哈希表的每一个哈希桶与一条WAL记录对应设置,每一条WAL记录的识别号包括该条WAL记录的写入磁盘文件的起始地址(start_pos)和结束地址(end_pos),并且当一条WAL记录完成复制时,标识其完成复制的标记为finished。
在该实施例中,在步骤S102之前,本发明的处理方法还包括以下步骤:通过WAL管理器分别为数据库运行中产生的多条WAL记录中的每一条WAL记录申请一个写入磁盘文件的start_pos,并将每一条WAL的start_pos与该条WAL的长度相加得到该条WAL记录的end_pos。如图2所示,例如,在进程启动后,第一条WAL记录的start_pos为0,且第一条WAL记录的长度为10字节,则第一条WAL记录的end_pos为10。也就是说,根据每一条WAL记录的start_pos和其长度即可以确定该条WAL记录的end_pos。在此基础上,只要WAL记录的长度可知,即可以通过hash(start_pos)找到end_pos。
另外,将每一条WAL记录的start_pos作为索引(key),均可以映射到哈希表中的一个哈希桶来访问哈希桶内记录的数据,也可以将每一条WAL记录的start_pos作为key,在哈希表中查找到和其对应的哈希桶,并将相关信息记录在和其对应的哈希桶中。具体地,如图2所示,同一待提交事务的多条WAL记录按照start_pos从小到大的顺序依次与在哈希表的物理位置上顺序分布的多个哈希桶一一对应设置,实现了利用哈希表的结构特点方便快捷地将WAL记录顺序排列。在一些具体实施例中,哈希函数的结构如图2所示,每一个哈希桶中对应于一对start_pos和end_pos,将任一识别号中的start_pos作为哈希表的key,hash(start_pos)即可以从哈希表找到与该识别号相对应的哈希桶。
同时,每个待提交事务的非首条WAL记录的起始地址为同一待提交事务的上一条WAL记录的结束地址与预设长度之和。其中预设长度可以依需设置。例如,预设长度为1字节,实现了在保证前后两条WAL记录的识别号不重复的同时,尽可能的节省哈希表的字节占用。如图2所示,在进程启动后的第一条WAL记录的end_pos为10,此end_pos+1便是下一条WAL记录的start_pos,下一条WAL记录的start_pos为11,依次类推,除了第一条WAL记录的start_pos可以默认设置为初始值,接下来的每一条WAL记录的start_pos均可以根据上一条WAL记录的end_pos+1得到。
在此基础上,上述步骤S102的流程可以包括:将待提交事务的每一条WAL记录的end_pos与预设长度的求和得到待提交事务的下一条WAL记录的start_pos;将每一条WAL记录的start_pos作为key,查找到与该条WAL记录对应的哈希桶,将每一条WAL记录的起始地址和结束地址分别记录到和其相对应的哈希桶中,并在每一条WAL记录复制到WAL缓存中之后,将标示着该条WAL记录完成复制的标记记录到和其相对应的哈希桶中。以标识着一条WAL记录完成复制的标记为finished为例,在待提交事务的一条WAL记录复制到WAL缓存中之后,将finished记录到和该条WAL记录相对应的哈希桶中。
另外,上述步骤S106中根据待提交事务的每一条WAL记录的识别号在哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的标记顺序查看待提交事务的每一条WAL记录的复制状态的步骤可以包括:将待提交事务的第一条WAL记录的end_pos与预设长度相加得到待提交事务的下一条WAL记录的start_pos;将下一条WAL记录的start_pos作为哈希表的key,查找与下一条WAL记录对应的哈希桶,并根据查找到的哈希桶中的标记查看下一条WAL记录的复制状态;在下一条WAL记录否完成复制的情况下,将下一条WAL记录的end_pos与预设长度的相加作为哈希表的key,继续查找与下一条WAL记录对应的哈希桶,直至确定下一条WAL记录未完成复制,停止查找。其中根据查找到的哈希桶中的标记查看下一条WAL记录的复制状态的步骤可以具体执行为:在查找到的哈希桶记录有下一条WAL记录的完成复制标记的情况下,确定该下一条WAL已经完成复制,以标识着一条WAL记录完成复制的标记为finished为例,当查找到的哈希桶内记录有finished时,确认和其对应的WAL记录已经完成复制;在查找到的哈希桶未记录有下一条WAL记录的完成复制标记或者记录有标示着该条WAL记录未完成复制的标记的情况下,确定该下一条WAL未完成复制。
使用上述方法,根据每一条WAL记录的start_pos可以获得该条WAL记录的end_pos,根据前一条WAL记录的end_pos,可以顺序地查找到下一条WAL记录的start_pos,进一步保证了根据每一条WAL记录的end_pos可以方便快捷地找到下一条WAL记录。同时,将每个待提交事务的非首条WAL记录的start_pos设置为与上一条WAL记录的end_pos之间始终存在预设长度的差值,保证了与在哈希表的物理位置上前后排布的两个哈希桶对应的识别号不会存在重复,继而提高了根据查找到的哈希桶中的标记顺序查看待提交事务的每一条WAL记录的复制状态的准确性,从而进一步提高了数据库管理系统的整体性能。
在一些实施例中,在上述步骤S106之前,本发明的处理方法还包括以下步骤:在确定准备提交待提交事务的情况下,确定待提交事务的WAL的刷写进度。需要说明的是,准备提交待提交事务是指数据库管理系统的服务进程即将提交事务,提交事务是将该事务中所有对数据库的更新写回到磁盘上的物理数据库中去,只有保证在将待提交事务的所有WAL记录刷写到磁盘文件之后,再提交该待提交事务,才能保证数据库是可恢复的。因此,在提交待提交事务,需要先确定是否已经将WAL缓存中与待提交事务的WAL记录相关的部分刷写到磁盘文件。
具体地,确定待提交事务的WAL的刷写进度的步骤包括:获取WAL缓存的刷写位置(flush_pos),并获取待提交事务的请求位置;将flush_pos与请求位置和进行比对;根据比对结果得到待提交事务的WAL的刷写进度。需要说明的是,WAL缓存的flush_pos可以在WAL管理器中直接获取得到。在一个具体实施例中,请求位置包括待提交事务的第一条WAL记录的start_pos和最后一条WAL记录的end_pos。也就是说,待提交事务的请求位置为在待提交事务的全部WAL记录刷写到磁盘文件的起始地址和结束地址之间的整块位置。具体地,待提交事务的全部WAL记录刷写到磁盘文件的起始地址可以为待提交事务的第一条WAL记录的start_pos,待提交事务的全部WAL记录刷写到磁盘文件的结束地址可以为待提交事务的最后一条WAL记录的end_pos。
在上述将flush_pos与请求位置和进行比对的步骤之后,会出现三种情况:flush_pos>end_pos,flush_pos<start_pos以及flush_pos==start_pos。在此基础上,根据比对结果得到待提交事务的日志刷写进度的步骤可以具体执行为:当flush_pos大于请求位置中的end_pos时,即在比对结果为flush_pos>end_pos的情况下,代表flush_pos已经超过本次请求的结束地址,代表待提交事务相关的WAL均提交完成,由此,确定待提交事务的WAL的刷写进度为刷写完成;当flush_pos小于请求位置中的start_pos时,即在比对结果为flush_pos<start_pos的情况下,代表在本事务之前仍运行着更早的事物,由此,确定待提交事务的WAL的刷写进度为未开始刷写;当flush_pos等于请求位置中的start_pos时,即在比对结果为flush_pos==start_pos的情况下,代表待提交事务可以刷写WAL缓存到磁盘文件中,由此,确定待提交事务的WAL的刷写进度为刷写中。
进一步地,在确定准备提交待提交事务的情况下,在上述确定待提交事务的WAL的刷写进度的步骤之前,本发明的处理方法还包括以下步骤:申请刷写锁,并阻塞复制进程。也就是说,在确定数据库管理系统的服务进程提交事务的情况下,需要加刷写锁,保证刷写在某一时刻仅能由一个实体进行,并暂停将WAL记录复制到WAL缓存中。
在此基础上,当确定待提交事务的WAL的刷写进度为未开始刷写时,代表着在本待提交事务之前仍运行着更早的事物,可以释放刷写锁,并停止阻塞复制进程,则可以等待flush_pos改变的通知,并在WAL缓存的flush_pos改变的情况下,再次申请刷写锁并重新确定待提交事务的WAL的刷写进度;当确定待提交事务的WAL的刷写进度为刷写完成时,代表着待提交事务相关的WAL均提交完成,由此,可以释放刷写锁,直接提交待提交事务;当确定待提交事务的WAL的刷写进度为刷写中时,代表待提交事务可以刷写WAL缓存到磁盘文件中,由此,需要先在WAL缓存中逐条确认待提交事务的WAL记录的复制状态,再将完成复制的WAL记录刷写WAL缓存到磁盘文件。
也就是说,在确定待提交事务的WAL的刷写进度的步骤之后,本发明的处理方法还包括以下步骤:在刷写进度为未开始刷写的情况下,释放刷写锁,并停止阻塞复制进程,直至WAL缓存的flush_pos改变,再次申请刷写锁,并回到上述申请刷写锁,并阻塞复制进程的步骤,以重新确定刷写进度;在刷写进度为刷写完成的情况下,释放刷写锁,提交待提交事务;在待提交事务的WAL的刷写进度为刷写中的情况下,将请求位置中的起始地址作为flus_start_pos,根据待提交事务的每一条WAL记录的识别号在哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的标记顺序查看待提交事务的每一条WAL记录的复制状态,在查找到待提交事务的最后一条WAL记录之后,将最后一条WAL记录的end_pos作为flush_end_pos,将flush_start_pos和flush_end_pos之间的整块WAL缓存刷写到磁盘文件中,并根据flush_end_pos,更新WAL缓存的flush_pos。
使用上述方法,当数据库管理系统的服务进程运行的事务提交时,只需查看WAL管理器中的刷写进度即可,无需遍历哈希桶,进一步提升了数据库管理系统的性能。并且在待提交事务的WAL的刷写进度为刷写中的情况下,将足够大的整块WAL缓存刷写到磁盘文件中,实现了一次性将尽可能多的WAL缓存刷写到磁盘文件中,提升了WAL刷写效率。
图3是根据本发明又一个实施例的处理方法的流程示意图。下面结合图3对本实施例的流程步骤进行具体说明。
步骤S302,获取数据库运行中产生的多条WAL记录。
步骤S304,通过WAL管理器为多条WAL记录hash申请识别号。需要说明的是,每一条WAL记录的识别号包括该条WAL记录的写入磁盘文件的start_pos和end_pos。
步骤S306,初始化哈希桶。
步骤S308,将多条WAL记录复制到WAL缓存中,并利用哈希表记录多条WAL的复制状态。在一个具体实施例中,利用哈希表记录多条WAL的复制状态的步骤可以具体执行为:将每一个WAL记录的start_pos作为key,通过hash(start_pos)查找到和其对应的哈希桶,并将每一条WAL记录的识别号以及标示着该条WAL记录是否完成复制的标记复制到和其相对应的哈希桶中。
步骤S310,判断待提交事务是否需要提交,若是,则执行步骤S312,若否,则返回步骤S302。
步骤S312,申请刷写锁,并阻塞复制进程。
步骤S314,获取WAL缓存的flush_pos,并获取待提交事务的请求位置。其中,WAL缓存的flush_pos可以在WAL管理器中直接获取得到,请求位置包括待提交事务的第一条WAL记录的start_pos和最后一条WAL记录的end_pos。
步骤S316,将flush_pos与请求位置和进行比对,当flush_pos小于请求位置中的start_pos时,执行步骤S318,当flush_pos大于请求位置中的end_pos时,执行步骤S322,当flush_pos等于请求位置中的start_pos时,执行步骤S326。
步骤S318,释放刷写锁,并停止阻塞复制进程。
步骤S320,判断WAL缓存的flush_pos是否改变,若是,则返回步骤S314,若否,则继续执行步骤S320。需要说明的是,当flush_pos小于请求位置中的start_pos时,代表在待提交事务之前仍运行着更早的事物,因此需要等待flush_pos改变的通知。
步骤S322,释放刷写锁,并停止阻塞复制进程。
步骤S324,提交待提交事务。需要说明的是,当flush_pos大于请求位置中的end_pos时,代表待提交事务相关的WAL缓存均已经刷写到磁盘文件中,因此可以直接释放刷写锁,提交待提交事务,结束本次流程。
步骤S326,将待提交事务的第一条WAL记录的start_pos作为flush_start_pos。需要说明的是,当flush_pos等于请求位置中的start_pos时,代表待提交事务可以刷写WAL缓存到磁盘中。
步骤S328,根据待提交事务的第一条WAL记录的start_pos,通过hash(start_pos)找到end_pos。需要说明的是,在通过WAL管理器分别多条WAL记录申请识别号时,并每一条WAL申请得到的start_pos与该条WAL的长度相加即可得到该条WAL记录的end_pos。
步骤S330,将得到的end_pos与预设长度相加即可得到待提交事务的下一条WAL记录的start_pos,并将下一条WAL记录的start_pos作为哈希表的key,查找与下一条WAL记录对应的哈希桶。在一个具体实施例中,预设长度为1字节,也就是说,将非首条的WAL记录的end_pos+1即可得到待提交事务的下一条WAL记录的start_pos。
步骤S332,判断下一条WAL记录是否完成复制,若是,则将下一条WAL记录的end_pos作为最新得到的end_pos,并返回步骤S330,若否,则执行步骤S334。以标识着一条WAL记录完成复制的标记为finished为例,当查找到的哈希桶内记录有finished时,确认和其对应的WAL记录已经完成复制。
步骤S334,将待提交事务的最后一条完成复制的WAL记录的end_pos作为flush_end_pos,将刷写start_pos和刷写end_pos之间的整块WAL缓存刷写到磁盘文件中。
步骤S336,根据flush_end_pos,更新WAL缓存的flush_pos,并执行步骤S322。
通过上述步骤,采用哈希表替代数组结构记录数据库运行中产生的多条WAL记录复制到WAL缓存的状态,实现了将哈希表设置的足够大即可以实现将复制的并发提高到尽可能大,实现更快的WAL复制。同时,哈希表的每一个哈希桶与一条WAL记录对应设置,并且每一个哈希桶内记录有和其对应的WAL记录的识别号以及标示着该条WAL记录是否完成复制的标记,实现了通过哈希表进行I/O索引即可以有序、快速地查看待提交事务的每一条WAL记录的复制情况,无需遍历,从而提升了数据库管理系统的性能。
本实施例还提供了一种机器可读存储介质和计算机设备。图4是根据本发明一个实施例的机器可读存储介质10的结构示意图,图5是根据本发明一个实施例的计算机设备20的结构示意图。
机器可读存储介质10其上存储有机器可执行程序11,机器可执行程序11被处理器执行时实现上述任一实施例的处理方法。
计算机设备20可以包括存储器220、处理器210及存储在存储器220上并在处理器210上运行的机器可执行程序11,并且处理器210执行机器可执行程序11时实现上述任一实施例的处理方法。
需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何机器可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
就本实施例的描述而言,机器可读存储介质10可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质10甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。
计算机设备20可以是例如服务器、台式计算机、笔记本式计算机、平板计算机或智能手机。在一些示例中,计算机设备20可以是云计算节点。计算机设备20可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机设备20可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
计算机设备20可以包括适于执行存储的指令的处理器210、在操作期间为所述指令的操作提供临时存储空间的存储器220。处理器210可以是单核处理器、多核处理器、计算集群或任何数量的其他配置。存储器220可以包括随机存取存储器(RAM)、只读存储器、闪存或任何其他合适的存储系统。
本实施例提供的流程图并不旨在指示方法的操作将以任何特定的顺序执行,或者方法的所有操作都包括在所有的每种情况下。此外,方法可以包括附加操作。在本实施例方法提供的技术思路的范围内,可以对上述方法进行附加的变化。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
Claims (10)
1.一种预写式日志的处理方法,包括:
将数据库运行中产生的多条预写式日志记录复制到预写式日志缓存中;
利用数据库管理系统中预先构建的哈希表记录所述多条预写式日志的复制状态,其中,所述哈希表的每一个哈希桶与一条预写式日志记录对应设置,并且每一个所述哈希桶内记录有和其对应的预写式日志记录的识别号以及标示着该条预写式日志记录是否完成复制的标记;
在将所述预写式日志缓存刷写到磁盘文件中之前,根据待提交事务的每一条预写式日志记录的识别号在所述哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的所述标记顺序查看所述待提交事务的每一条预写式日志记录的复制状态。
2.根据权利要求1所述的处理方法,其中,每一条预写式日志记录的识别号包括该条预写式日志记录的写入磁盘文件的起始地址和结束地址,其中,每个待提交事务的非首条预写式日志记录的起始地址为同一所述待提交事务的上一条预写式日志记录的结束地址与预设长度之和;并且
所述根据待提交事务的每一条预写式日志记录的识别号在所述哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的所述标记顺序查看所述待提交事务的每一条预写式日志记录的复制状态的步骤包括:
将所述待提交事务的第一条预写式日志记录的结束地址与所述预设长度相加得到所述待提交事务的下一条预写式日志记录的起始地址;
将所述下一条预写式日志记录的起始地址作为所述哈希表的索引,查找与所述下一条预写式日志记录对应的哈希桶,并根据查找到的哈希桶中的所述标记查看所述下一条预写式日志记录的复制状态;
在所述下一条预写式日志记录否完成复制的情况下,将所述下一条预写式日志记录的结束地址与所述预设长度的相加作为所述哈希表的索引,继续查找与下一条预写式日志记录对应的哈希桶,直至确定下一条预写式日志记录未完成复制,停止查找。
3.根据权利要求2所述的处理方法,其中,在将所述预写式日志缓存刷写到磁盘文件中之前,所述处理方法还包括:
在确定准备提交所述待提交事务的情况下,确定所述待提交事务的预写式日志的刷写进度;
在所述刷写进度为刷写中的情况下,将所述待提交事务的第一条预写式日志记录的起始地址作为刷写起始地址;并且
在所述根据待提交事务的每一条预写式日志记录的识别号在所述哈希表中查找和其对应的哈希桶,并根据查找到的哈希桶中的所述标记顺序查看所述待提交事务的每一条预写式日志记录的复制状态的步骤之后,所述处理方法还包括:
将所述待提交事务的最后一条完成复制的预写式日志记录的结束地址作为刷写结束地址;
将所述刷写起始地址和所述刷写结束地址之间的整块预写式日志缓存刷写到磁盘文件中。
4.根据权利要求3所述的处理方法,其中,所述确定所述待提交事务的预写式日志的刷写进度的步骤包括:
获取所述预写式日志缓存的刷写位置,并获取所述待提交事务的请求位置,其中所述请求位置包括所述待提交事务的第一条预写式日志记录的起始地址和最后一条预写式日志记录的结束地址;
将所述刷写位置与所述请求位置和进行比对;
根据比对结果得到所述待提交事务的预写式日志的刷写进度。
5.根据权利要求4所述的处理方法,其中,所述根据比对结果得到所述待提交事务的日志刷写进度的步骤包括:
当所述刷写位置大于所述请求位置中的结束地址时,确定所述待提交事务的预写式日志的刷写进度为刷写完成;
当所述刷写位置小于所述请求位置中的起始地址时,确定所述待提交事务的预写式日志的刷写进度为未开始刷写;
当所述刷写位置等于所述请求位置中的起始地址时,确定所述待提交事务的预写式日志的刷写进度为刷写中。
6.根据权利要求5所述的处理方法,其中,在所述确定所述待提交事务的预写式日志的刷写进度的步骤之前,所述处理方法还包括:
申请刷写锁,并阻塞复制进程;并且
在所述确定所述待提交事务的预写式日志的刷写进度的步骤之后,所述处理方法还包括:
在所述刷写进度为未开始刷写的情况下,释放刷写锁,并停止阻塞复制进程,直至所述预写式日志缓存的刷写位置改变,再次申请刷写锁,并重新确定所述刷写进度;
在所述刷写进度为刷写完成的情况下,释放刷写锁,提交所述待提交事务。
7.根据权利要求2所述的处理方法,其中,在所述将数据库运行中产生的多条预写式日志记录复制到预写式日志缓存中的步骤之前,所述处理方法还包括:
通过预写式日志管理器分别为所述数据库运行中产生的多条预写式日志记录中的每一条预写式日志记录申请一个写入磁盘文件的起始地址,并将每一条预写式日志的起始地址与该条预写式日志的长度相加得到该条预写式日志的结束地址。
8.根据权利要求7所述的处理方法,其中,所述利用数据库管理系统中预先构建的哈希表记录所述多条预写式日志的复制状态的步骤包括:
分别将每一条预写式日志记录的起始地址作为所述哈希表的索引,在所述哈希表中查找与所述每一条预写式日志记录对应的哈希桶;
将每一条预写式日志记录的起始地址和结束地址分别记录到和其相对应的哈希桶中,并在每一条预写式日志记录复制到预写式日志缓存中之后,将标示着该条预写式日志记录完成复制的标记记录到和其相对应的哈希桶中。
9.一种机器可读存储介质,其上存储有机器可执行程序,所述机器可执行程序被处理器执行时实现根据权利要求1至8任一项所述的处理方法。
10.一种计算机设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的机器可执行程序,并且所述处理器执行所述机器可执行程序时实现根据权利要求1至8任一项所述的处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210641104.5A CN114936215B (zh) | 2022-06-07 | 2022-06-07 | 一种预写式日志的处理方法、存储介质与设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210641104.5A CN114936215B (zh) | 2022-06-07 | 2022-06-07 | 一种预写式日志的处理方法、存储介质与设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114936215A true CN114936215A (zh) | 2022-08-23 |
CN114936215B CN114936215B (zh) | 2024-06-11 |
Family
ID=82867254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210641104.5A Active CN114936215B (zh) | 2022-06-07 | 2022-06-07 | 一种预写式日志的处理方法、存储介质与设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114936215B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060117074A1 (en) * | 2004-11-30 | 2006-06-01 | Ezzat Ahmed K | Method and apparatus for database cluster recovery |
CN107784121A (zh) * | 2017-11-18 | 2018-03-09 | 中国人民解放军国防科技大学 | 一种基于非易失内存的日志文件系统的小写优化方法 |
CN107862064A (zh) * | 2017-11-16 | 2018-03-30 | 北京航空航天大学 | 一个基于nvm的高性能、可扩展的轻量级文件系统 |
CN111480149A (zh) * | 2017-12-15 | 2020-07-31 | 微软技术许可有限责任公司 | 持久存储器设备中的预写式日志记录 |
US20210133158A1 (en) * | 2019-11-01 | 2021-05-06 | EMC IP Holding Company LLC | Methods and systems for logging data transactions and managing hash tables |
-
2022
- 2022-06-07 CN CN202210641104.5A patent/CN114936215B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060117074A1 (en) * | 2004-11-30 | 2006-06-01 | Ezzat Ahmed K | Method and apparatus for database cluster recovery |
CN107862064A (zh) * | 2017-11-16 | 2018-03-30 | 北京航空航天大学 | 一个基于nvm的高性能、可扩展的轻量级文件系统 |
CN107784121A (zh) * | 2017-11-18 | 2018-03-09 | 中国人民解放军国防科技大学 | 一种基于非易失内存的日志文件系统的小写优化方法 |
CN111480149A (zh) * | 2017-12-15 | 2020-07-31 | 微软技术许可有限责任公司 | 持久存储器设备中的预写式日志记录 |
US20210133158A1 (en) * | 2019-11-01 | 2021-05-06 | EMC IP Holding Company LLC | Methods and systems for logging data transactions and managing hash tables |
Non-Patent Citations (1)
Title |
---|
耿振民;杨弘;杨海滨;: "一种基于本地数据库的日志安全策略", 信息安全与通信保密, no. 04, 10 April 2013 (2013-04-10) * |
Also Published As
Publication number | Publication date |
---|---|
CN114936215B (zh) | 2024-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11080260B2 (en) | Concurrent reads and inserts into a data structure without latching or waiting by readers | |
KR100862661B1 (ko) | 지연된 로깅 방법 및 그 장치 | |
US6618736B1 (en) | Template-based creation and archival of file systems | |
US9280578B1 (en) | Combining transactions in a metadata transaction log | |
US4945474A (en) | Method for restoring a database after I/O error employing write-ahead logging protocols | |
US9886443B1 (en) | Distributed NFS metadata server | |
US11392567B2 (en) | Just-in-time multi-indexed tables in a shared log | |
US10642792B2 (en) | Distributed transaction conflict resolution | |
JP2012507072A (ja) | 分散ストレージシステムにおけるデータのアトミックな複合変形 | |
US11176119B2 (en) | Database recovery using persistent address spaces | |
US10649981B2 (en) | Direct access to object state in a shared log | |
CN111090663A (zh) | 事务并发控制方法、装置、终端设备及介质 | |
US11200122B2 (en) | Barrierless snapshots | |
JPH0776944B2 (ja) | 仮想索引機構 | |
KR20120104302A (ko) | 순서 의존성 없는 일관성 | |
CN113515501B (zh) | 非易失性内存数据库管理系统恢复方法、装置和电子设备 | |
CN118140217A (zh) | 经由用于弹性缓冲池扩展的预暂存缓冲区进行本地页写入 | |
US11113251B2 (en) | Transaction manager | |
US10635541B2 (en) | Fine-grained conflict resolution in a shared log | |
US10146466B1 (en) | Merging mapping metadata to promote reference counting efficiency | |
US20230124036A1 (en) | In-place garbage collection for state machine replication | |
CN114936215B (zh) | 一种预写式日志的处理方法、存储介质与设备 | |
CN114691307A (zh) | 事务处理方法及计算机系统 | |
US11334445B2 (en) | Using non-volatile memory to improve the availability of an in-memory database | |
CN112231105A (zh) | 基于区块链的区块写入方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |