背景技术:
1、数据库管理系统(dbms)是一种用于管理一个或多个数据库以及用于接收和解决对所管理的数据库的查询的系统。dbms可管理存储在一个或多个存储装置上并构成一个或多个所管理的数据库的一部分的一个或多个数据表或关系。dbms可读取和写入所管理的表的各个行或列,包括更新、删除和添加记录。
2、dbms可在串行恢复模式下操作读副本(read-replica)数据库,持续应用从主数据库接收到的预写日志(write ahead log)(wal)记录。当读副本数据库赶上主数据库时,用户可继续运行读取查询。
3、通常,读副本数据库按日志序列号(lsn)顺序串行地执行日志记录处理。然而,如果主数据库生成了大量wal记录(例如,每秒一百万个日志记录)并且有多个进程并行,那么串行日志记录处理就无法跟上。于是,读副本数据库将会落后于主数据库,无法提供最新数据。
技术实现思路
1、本公开的各方面涉及一种并行恢复模式,以允许在读副本数据库上进行一致的读取查询。并行恢复模式可应用批次中的日志记录,同时仍在读副本数据库上提供读取查询。并行恢复模式可按照日志序列号(lsn)顺序管理数据块或多个数据块的日志记录。并行恢复模式可进一步管理不同日志记录之间的依赖关系,并维持读取查询上的事务一致性。并行恢复模式还可处置关于数据定义语言(ddl)的日志记录。
2、本公开的一方面提供了一种用于执行并行预写日志(wal)记录处理的方法,该方法包括:由一个或多个处理器接收日志记录批次,每个日志记录具有日志序列号(lsn);由一个或多个处理器基于一个或多个块引用将批次的日志记录指派给一个或多个并行进程,其中批次的每个日志记录由被指派了批次的每个日志记录的并行进程按lsn顺序处理;由一个或多个处理器确定读取事务正在读取在日志记录批次中正被修改的数据块;以及响应于块不是批次中正被修改的第一块,由一个或多个处理器指令读取事务等待批次的日志记录应用于正被修改的数据块。
3、在示例中,每个lsn与接收日志记录的顺序相对应。在另一示例中,一个或多个块引用包括数据库编号、表空间编号、表编号、分叉(fork)编号或块编号中的至少一个。在又一示例中,将批次的日志记录指派给并行进程进一步包括使用包括一个或多个块引用的哈希函数。
4、在又一示例中,该方法进一步包括:由一个或多个处理器确定批次的日志记录影响多个数据块;由一个或多个处理器在应用批次之前锁定多个数据块;以及由一个或多个处理器生成伪本地缓冲区(fake local buffer)。在又一示例中,处理日志记录与将日志记录应用于一个或多个副本数据库相对应。在又一示例中,该方法进一步包括:响应于块是批次中正被修改的第一块,由一个或多个处理器允许读取事务。在又一示例中,该方法进一步包括:由一个或多个处理器在完成对批次的其他日志记录的处理之后处理日志记录批次的提交记录(commit record)。
5、在又一示例中,该方法进一步包括:由一个或多个处理器处理关于数据定义语言(ddl)的批次的日志记录;由一个或多个处理器提交关于ddl的日志记录;以及由一个或多个处理器在提交关于ddl的日志记录之后发起对日志记录的后续批次的处理。在又一示例中,该方法进一步包括:由一个或多个处理器使用并查集(union-find)技术查找批次中日志记录的不相交子集。在又一示例中,并查集技术包括创建子集,其中只有一个子集具有修改特定块的所有日志记录。在又一示例中,该方法进一步包括:由一个或多个处理器将每个不相交子集指派给并行进程,其中只有一个进程在锁定多个块之后应用影响多个块的日志记录。
6、本公开的另一方面提供了一种系统,该系统包括:一个或多个处理器;以及耦合到一个或多个处理器并且存储指令的一个或多个存储装置,该指令在由一个或多个处理器执行时使一个或多个处理器执行并行预写日志(wal)记录处理的操作,该操作包括:接收日志记录批次,每个日志记录具有日志序列号(lsn);基于一个或多个块引用将批次的日志记录指派给一个或多个并行进程,其中批次的每个日志记录由被指派了批次的每个日志记录的并行进程按lsn顺序处理;确定读取事务正在读取在日志记录批次中正被修改的数据块;以及响应于块不是在批次中正被修改的第一块,指令读取事务等待批次的日志记录应用于正被修改的数据块。
7、在示例中,将批次的日志记录指派给并行进程进一步包括使用包括一个或多个块引用的哈希函数。在另一示例中,该操作进一步包括:确定批次的日志记录影响多个数据块;在应用批次之前锁定多个数据块;以及生成伪本地缓冲区。在又一示例中,该操作进一步包括在完成批次的其他日志记录的处理之后处理日志记录批次的提交记录。
8、在又一示例中,该操作进一步包括:处理关于数据定义语言(ddl)的批次的日志记录;提交关于ddl的日志记录;以及在提交关于ddl的日志记录之后发起日志记录的后续批次的处理。在又一示例中,该操作进一步包括使用并查集技术查找批次中日志记录的不相交子集。在又一示例中,该操作进一步包括将每个不相交子集指派给并行进程,其中只有一个进程在锁定多个块之后应用影响多个块的日志记录。
9、本公开的又一方面提供了一种用于存储指令的非暂时性计算机可读介质,该指令在由一个或多个处理器执行时使一个或多个处理器执行并行预写日志(wal)记录处理的操作,该操作包括:接收日志记录批次,每个日志记录具有日志序列号(lsn);基于一个或多个块引用将批次的日志记录指派给一个或多个并行进程,其中批次的每个日志记录由被指派了批次的每个日志记录的并行进程按lsn顺序处理;确定读取事务正在读取在日志记录批次中正被修改的数据块;以及响应于块不是在批次中正被修改的第一块,指令读取事务等待批次的日志记录应用于正被修改的数据块。
1.一种用于执行并行预写日志(wal)记录处理的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,每个lsn与接收日志记录的顺序相对应。
3.根据权利要求1所述的方法,其特征在于,所述一个或多个块引用包括数据库编号、表空间编号、表编号、fork编号或块编号中的至少一个。
4.根据权利要求1所述的方法,其特征在于,将所述批次的所述日志记录指派给并行进程进一步包括:使用包括所述一个或多个块引用的哈希函数。
5.根据权利要求1所述的方法,其特征在于,进一步包括:由所述一个或多个处理器使用并查集技术来查找所述批次中的日志记录的不相交子集。
6.根据权利要求5所述的方法,其特征在于,所述并查集技术包括创建子集,其中只有一个子集具有修改特定块的所有日志记录。
7.根据权利要求6所述的方法,其特征在于,进一步包括由所述一个或多个处理器将每个不相交子集指派给并行进程,其中只有一个进程在锁定多个块之后应用影响所述多个块的日志记录。
8.根据权利要求1所述的方法,其特征在于,进一步包括:
9.根据权利要求1所述的方法,其特征在于,处理日志记录对应于将所述日志记录应用于一个或多个副本数据库。
10.根据权利要求1所述的方法,其特征在于,进一步包括:响应于所述块是所述批次中正被修改的所述第一块,由所述一个或多个处理器允许所述读取事务。
11.根据权利要求1所述的方法,其特征在于,进一步包括:在完成对所述批次的其他日志记录的处理之后,由所述一个或多个处理器处理所述日志记录批次的提交记录。
12.根据权利要求1所述的方法,其特征在于,进一步包括:
13.一种系统,其特征在于,包括:
14.根据权利要求13所述的系统,其特征在于,将所述批次的所述日志记录指派给并行进程进一步包括:使用包括所述一个或多个块引用的哈希函数。
15.根据权利要求13所述的系统,其特征在于,所述操作进一步包括:
16.根据权利要求13所述的系统,其特征在于,所述操作进一步包括:在完成对所述批次的其他日志记录的处理之后处理所述日志记录批次的提交记录。
17.根据权利要求13所述的系统,其特征在于,所述操作进一步包括:
18.根据权利要求13所述的系统,其特征在于,所述操作进一步包括:使用并查集技术查找所述批次中的日志记录的不相交子集。
19.根据权利要求18所述的系统,其特征在于,所述操作进一步包括:将每个不相交子集指派给并行进程,其中只有一个进程在锁定多个块之后应用影响所述多个块的日志记录。
20.一种用于存储指令的非暂时性计算机可读介质,所述指令在由一个或多个处理器执行时使所述一个或多个处理器执行并行预写日志(wal)记录处理的操作,其特征在于,所述操作包括: