一种管理数据库日志的方法及装置制造方法
【专利摘要】本发明实施例提供一种管理数据库日志的方法及装置,涉及计算机领域,能够在不使用现有技术中的日志缓冲区和排它锁的情况下,对数据库系统中的数据库日志进行并行管理,可以提高数据库系统的并发性能。该方法包括:获取第一数据库日志和第一数据库日志存储地址,其中,第一数据库日志为多个事务在执行时任意一个事务生成的任意一条数据库日志,根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM,其中,NVM允许多个第一数据库日志并行存储。
【专利说明】一种管理数据库日志的方法及装置
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种管理数据库日志的方法及装置。
【背景技术】
[0002]数据库日志是事务对数据库进行的各种操作的记录,是撤销事务和出现故障时恢复事务的依据。与普通的系统日志不同,数据库日志在记录数据库数据变化时,需要保证顺序的一致性,在故障恢复时,也要求完全按照事务发生的顺序进行恢复。
[0003]现有技术中,完成数据库日志的管理需包括:日志缓冲区、日志文件、后台日志写进程等。数据库系统在事务执行时将事务生成的数据库日志记录到日志缓冲区,其中,一个事务包括至少一条数据库日志,在事务执行完毕后,数据库系统将该事务在日志缓冲区中的数据库日志写到磁盘的日志文件中,或者在一些特定时刻(例如,日志缓冲区写满或者日志文件区写满)将日志缓冲区中已经执行完毕的事务的数据库日志写到磁盘的日志文件中。
[0004]现有的数据库系统中,数据库日志在日志缓冲区中缓存,当数据库日志从内存写入日志缓冲区或者从日志缓冲区写入磁盘时,必须获取日志缓冲区的排它锁,该排它锁只有一个并且全局共享,即一个时刻只允许一个进程对日志缓冲区进行读或写操作,因此在有多个进程要对日志缓冲区进行读或写操作时,日志缓冲区的这种工作模式会成为制约数据库系统性能的瓶颈。
【发明内容】
[0005]本发明的实施例提供一种管理数据库日志的方法及装置,能够在不使用现有技术中的日志缓冲区和排它锁的情况下,对数据库系统中的数据库日志进行并行管理,可以提高数据库系统的性能。
[0006]为达到上述目的,本发明的实施例采用如下技术方案:
[0007]第一方面,本发明实施例提供一种管理数据库日志的方法,包括:
[0008]获取第一数据库日志和第一数据库日志存储地址,其中,所述第一数据库日志为多个事务在执行时任意一个事务生成的任意一条数据库日志;根据所述第一数据库日志存储地址,将所述第一数据库日志存储至非易失性存储器NVM,其中,所述NVM允许多个所述第一数据库日志并行存储。
[0009]结合第一方面,在第一方面的第一种可能的实现方式中,所述根据所述第一数据库日志存储地址,将所述第一数据库日志存储至NVM之后,所述方法还包括:
[0010]若所述第一数据库日志为所述事务在执行时生成的第一条数据库日志,则在活跃事务列表中添加第一事务记录,其中,所述活跃事务列表用于记录当前正在执行的事务,所述第一事务记录至少包括所述事务的标识和所述第一数据库日志存储地址;若所述第一数据库日志不为所述事务在执行时生成的第一条数据库日志,则将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址,其中,所述第二数据库日志为所述事务在执行时生成的所述第一数据库日志的前一条数据库日志。
[0011]结合第一方面的第一种可能的实现方式中,在第一方面的第二种可能的实现方式中,所述在活跃事务列表中添加第一事务记录,或者所述将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址之后,所述方法还包括:
[0012]在提交事务列表中添加第二事务记录,其中,所述提交事务列表用于记录已经执行完毕的事务,所述第二事务记录至少包括所述事务的标识和第三数据库日志存储地址,所述第三数据库日志为所述事务执行完毕后生成的所有数据库日志中最后生成的一条数据库日志;删除所述活跃事务列表中的第一事务记录。
[0013]结合第一方面的第一种可能的实现方式中,在第一方面的第三种可能的实现方式中,所述在活跃事务列表中添加第一事务记录,或者所述将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址之后,所述方法还包括:
[0014]获取事务回滚信息;根据所述事务回滚信息,对所述事务进行回滚,并删除所述NVM内存储的所述事务在执行时生成的所有数据库日志,以及所述活跃事务列表中的第一事务记录。
[0015]结合第一方面的第二种可能的实现方式,在第一方面的第四种可能的实现方式中,所述在提交事务列表中添加第二事务记录之后,所述方法还包括:
[0016]获取事务恢复?目息;根据所述事务恢复?目息,对所述事务进行恢复。
[0017]结合第一方面或者第一方面的第一种可能的实现方式至第一方面的第四种可能的实现方式中的任意一种,在第一方面的第五种可能的实现方式中,所述第三数据库日志至少包括第三日志序号;所述方法还包括:获取预设日志序号;若所述事务已执行完毕,且所述第三日志序号小于等于所述预设日志序号,则删除所述NVM内存储的所述事务在执行时生成的所有数据库日志,以及所述提交事务列表中的第二事务记录。
[0018]第二方面,本发明实施例提供一种管理数据库日志的装置,包括:
[0019]第一获取模块,用于获取第一数据库日志和第一数据库日志存储地址,其中,所述第一数据库日志为多个事务在执行时任意一个事务生成的任意一条数据库日志;存储模块,用于根据所述第一数据库日志存储地址,将所述第一数据库日志存储至非易失性存储器NVM,其中,所述NVM允许多个所述第一数据库日志并行存储。
[0020]结合第二方面,在第二方面的第一种可能的实现方式中,所述装置还包括:
[0021]第一添加模块,用于根据所述第一数据库日志存储地址,将所述第一数据库日志存储至NVM之后,若所述第一数据库日志为所述事务在执行时生成的第一条数据库日志,则在活跃事务列表中添加第一事务记录,其中,所述活跃事务列表用于记录当前正在执行的事务,所述第一事务记录至少包括所述事务的标识和所述第一数据库日志存储地址;更新模块,用于若所述第一数据库日志不为所述事务在执行时生成的第一条数据库日志,则将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址,其中,所述第二数据库日志为所述事务在执行时生成的所述第一数据库日志的前一条数据库日志。
[0022]结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述装置还包括:
[0023]第二添加模块,用于所述在活跃事务列表中添加第一事务记录,或者所述将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址之后,在提交事务列表中添加第二事务记录,其中,所述提交事务列表用于记录已经执行完毕的事务,所述第二事务记录至少包括所述事务的标识和第三数据库日志存储地址,所述第三数据库日志为所述事务执行完毕后生成的所有数据库日志中最后生成的一条数据库日志;删除模块,用于在提交事务列表中添加第二事务记录之后,删除所述活跃事务列表中的第一事务记录。
[0024]结合第二方面的第一种可能的实现方式中,在第二方面的第三种可能的实现方式中,所述装置还包括:
[0025]第二获取模块,用于所述在活跃事务列表中添加第一事务记录,或者所述将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址之后,获取事务回滚信息;执行模块,用于根据所述事务回滚信息,对所述事务进行回滚,并删除所述NVM内存储的所述事务在执行时生成的所有数据库日志,以及所述活跃事务列表中的第一事务记录。
[0026]结合第二方面的第二种可能的实现方式,在第二方面的第四种可能的实现方式中,所述第二获取模块,还用于所述在提交事务列表中添加第二事务记录之后,获取事务恢复信息;所述执行模块,还用于根据所述事务恢复信息,对所述事务进行恢复。
[0027]结合第二方面或者第二方面的第一种可能的实现方式至第二方面的第四种可能的实现方式中的任意一种,在第二方面的第五种可能的实现方式中,所述第三数据库日志至少包括第三日志序号。
[0028]所述第二获取模块,还用于获取预设日志序号;所述执行模块,还用于若所述事务已执行完毕,且所述第三日志序号小于等于所述预设日志序号,则删除所述NVM内存储的所述事务在执行时生成的所有数据库日志,以及所述提交事务列表中的第二事务记录。
[0029]本发明实施例提供一种管理数据库日志的方法及装置,包括:获取第一数据库日志和第一数据库日志存储地址,其中,第一数据库日志为事务在执行时生成的任意一条数据库日志;根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM。
[0030]基于上述实施例的描述,采用NVM来存储数据库日志,由于NVM的非易失性,使得数据库日志可以在NVM上长久保存,并且由于本发明技术方案没有现有技术中的日志缓冲区,不存在排它锁,因此,可以更加高效的对数据库日志进行并行管理,提高数据库系统的性能。
【专利附图】
【附图说明】
[0031]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0032]图1为本发明实施例提供的一种管理数据库日志的方法流程示意图一;
[0033]图2为本发明实施例提供的一种管理数据库日志的方法流程示意图二 ;
[0034]图3为本发明实施例提供的一种管理数据库日志的方法流程示意图三;
[0035]图4为本发明实施例提供的一种管理数据库日志的方法流程示意图四;
[0036]图5为本发明实施例提供的一种管理数据库日志的方法流程示意图五;
[0037]图6为本发明实施例提供的一种管理数据库日志的装置的结构示意图一;
[0038]图7为本发明实施例提供的一种管理数据库日志的装置的结示意构图二 ;
[0039]图8为本发明实施例提供的一种管理数据库日志的装置的结示意构图三;
[0040]图9为本发明实施例提供的一种管理数据库日志的装置的结示意构图四;
[0041]图10为本发明实施例提供的一种管理数据库日志的装置的结示意构图五。
【具体实施方式】
[0042]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0043]实施例一
[0044]本发明实施例提供一种管理数据库日志的方法,如图1所示,为该方法的流程示意图,包括:
[0045]S101、数据库系统获取第一数据库日志和第一数据库日志存储地址。
[0046]其中,第一数据库日志为多个事务在执行时任意一个事务生成的任意一条数据库曰志。
[0047]需要说明的是,数据库系统中有多个事务进程并发执行,在对多个事务生成的数据库日志进行存储时,获取任意一个事务生成的任意一条数据库日志,并将其存储至NVM中。NVM可以允许多个事务进程同时进行写操作,将多个数据库日志进行存储,从而提高数据库系统的并发性能。
[0048]事务生成数据库日志之后,数据库系统需要将事务生成的数据库日志进行存储,而数据库系统在存储数据库日志时需要知道数据库日志的存储地址,因此,数据库系统在记录事务生成的数据库日志时,要获取第一数据库日志和第一数据库日志存储地址。
[0049]需要说明的是,一个事务至少生成一条数据库日志,当一个事务生成多条数据库日志时,数据库系统要保证存储事务生成的数据库日志的顺序要与事务实际生成数据库日志的顺序一致。这样,才能保证在数据库日志进行回滚或者恢复时的正确性。
[0050]示例性的,数据库系统通过LSN(log sequence number,日志序号)的方式保证数据库日志的有序性。其中LSN为单调递增的整数,每一条数据库日志在存储时,都会附带上数据库系统为其生成的LSN。LSN的生成方式可以是中心维护,也可以是使用某些算法(例如Lamport)生成,或者采用高精度时钟以及相应的和时钟相关的时钟算法等方法生成。
[0051]还需要说明的是,在多个事务并发执行时,数据库系统为多个事务交叉生成日志序号,示例性的,第一事务当前一条数据库日志的LSN为20000,且第一事务还没有提交,还在继续执行,此时,有第二事务,生成了一条数据库日志,则数据库系统为第二事务生成的该条数据库日志生成的LSN为20001,此时,第一事务又生成了一条数据库日志,则数据库系统为第一事务的该条数据库日志生成的LSN为20002。即可能属于同一个事务的各个数据库日志的LSN不是连续编号的,但是的属于同一个事务的各个数据库日志的LSN仍然是单调递增的,可以保证记录该事务各个数据库日志的顺序与执行该事务时生成的各个数据库日志的顺序是一致的。
[0052]S102、数据库系统根据第一数据库日志存储地址,将第一数据库日志存储至NVM。
[0053]其中,NVM允许多个第一数据库日志并行存储。
[0054]需要说明的是,在本发明技术方案中,如果有一个事务正在执行,并且数据库系统中是的事务进程将其生成的数据库日志存储在NVM中;同时,又有其他事务也在执行,并且生成了数据库日志,则数据库系统中的事务进程可以将该事务生成的数据库日志也存储在NVM中,使得多个正在执行的事务对NVM进行并行操作。
[0055]在本发明技术方案中,数据库日志是存储在NVM(non_volatile memory,非易失性存储器)中的,NVM是指当电源关掉后,所存储的数据不会丢失的存储器。依据NVM内的数据是否能够随时改写,NVM可以分为ROM (read-only memory,只读存储器)和Flashmemory (闪存)。其中,ROM 又包括:PROM (programmable read-only memory,可编程只读存储器)、EAR0M(electrically alterable read-only memory,电可改写只读存储器)、EPROM (erasable programmable read-only memory,可擦可编程只读存储器)和EEPROM(electricalIy erasable programmable read-only memory,电可擦可编程只读存储器)。还有一种NVM,它集成了普通DDR(double data rate) RAM和非易失性FLASH芯片的内存条,称为NVDIMM(non-volatile dual inline memory module,非易失性双列直插式存储模块),在系统异常掉电后,NVDIMM借助其后备超级电容作为动力源,在短时间内将数据放入FLASH芯片,从而永久保存内存中的数据。本方案中的NVM可以是任意一种NVM。
[0056]示例性的,数据库系统在NVM中存储数据库日志时,可以通过两种方式来存储。具体的,第一种方式为:当一个事务开始启动后,数据库系统在NVM上为该事务分配一段存储空间,用来存储该事务在执行过程中生成的所有数据库日志,一般的,这种方式分配的NVM空间比较大,因此,该事务生成的数据库日志可以连续存储,每一条数据库日志的存储地址是物理连续的;因此,数据库系统在获取该事务的第一数据库日志和第一数据库日志的存储地址后,将该事务生成的第一数据库日志存储在NVM中,并且在第一数据库日志存储时,数据库系统至少会为该第一数据库日志的日志记录中添加该第一数据库日志的LSN和该第一数据库日志的存储地址。第二种方式为:数据库系统为一个事务在执行过程中生成的第一数据库日志分配存储空间,当该事务生成下一条数据库日志时,数据库系统再为其分配存储空间,即该事务在执行时生成的数据库日志在NVM中的存储地址有可能不是物理连续的,但是该事务的每一条数据库日志的日志记录中都保存了其上一条数据库日志的存储地址,以使得该事务在执行时生成的所有数据库日志以链表的形式相互联系起来。
[0057]需要说明的是,本发明技术方案中,数据库系统将事务在执行时生成的数据库日志存储在NVM中,由于数据库系统对NVM的管理不需要现有技术中的日志缓冲区,当数据库系统对其进行读写操作时,必须获得日志缓冲区的排它锁,并且一个时刻只有一个事务进程会获得日志缓冲区的排它锁,而本发明中的NVM可以允许多个事务进程同时进行读写操作,在事务并发量比较大时,可以大大提高数据库系统的性能。
[0058]进一步的,因为NVM的非易失性,事务生成的数据库日志可以在NVM上长久保存,而不用像现有技术那样,需要将日志缓冲区中的数据库日志频繁的写入磁盘,以使得数据库日志长久保存,满足事务执行的持久性。
[0059]通过上述描述,可以理解的是,现有技术中数据库系统对数据库日志的管理为将事务在执行时生成的数据库日志暂时存入日志缓冲区,日志缓冲区再将数据库日志写入磁盘长久保存;而本发明技术方案中,数据库系统直接将事务在执行时生成的数据库日志存入NVM中长久保存。
[0060]需要说明的是,本发明技术方案提供的管理数据库日志的方法可以应用于各种集群或者分布式数据库,以及OLTP (on-line transact1n processing,联机事务处理)系统中。
[0061]本发明实施例提供一种管理数据库日志的方法,包括:获取第一数据库日志和第一数据库日志存储地址,其中,第一数据库日志为事务在执行时生成的数据库日志中的任意一条数据库日志;根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM。
[0062]基于上述实施例的描述,采用NVM来存储数据库日志,由于NVM的非易失性,使得数据库日志可以在NVM上长久保存,并且由于本发明技术方案没有现有技术中的日志缓冲区,不存在排它锁,因此,可以更加高效的对数据库日志进行并行管理,提高数据库系统的性能。
[0063]实施例二
[0064]本发明实施例提供一种管理数据库日志的方法,如图2所示,为该方法的流程示意图,包括:
[0065]S201、数据库系统获取第一数据库日志和第一数据库日志存储地址。
[0066]其中,第一数据库日志为事务在执行时生成的数据库日志中的任意一条数据库日
)■'、O
[0067]需要说明的是,本发明提供的技术方案应用于多个事务并行的场合,因为在本发明技术方案中,多个进程可以同时对NVM进行读写,并且多个事务的进程是独立的,因此,在本发明实施例中以一个事务的执行过程对本发明技术方案进行详细描述。
[0068]S202、数据库系统根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM。
[0069]首先,数据库系统获取事务在执行时生成的第一数据库日志和第一数据库日子存储地址,并根据第一数据库日志存储地址将第一数据库日志记录在NVM中。
[0070]S203、若第一数据库日志为事务在执行时生成的第一条数据库日志,则数据库系统在活跃事务列表中添加第一事务记录。
[0071]其中,活跃事务列表用于记录当前正在执行的事务,第一事务记录至少包括事务的标识和第一数据库日志存储地址。
[0072]为了对数据库日志进行有效的管理,数据库系统还需要在NVM上维护两个事务列表,包括:活跃事务列表和提交事务列表。具体的,活跃事务列表用于记录当前正在执行的事务。
[0073]需要补充的是,数据库系统维护的两个事务列表:活跃事务列表和提交事务列表也可以不存储在NVM中,数据库系统可以将这两个事务列表在任何可以存储数据的存储器中进行维护。
[0074]当第一数据库日志为事务在执行时生成的第一条数据库日志时,则说明该事务刚开始执行,在活跃事务列表中还不存在该事务的活跃事务列表,因此,在活跃事务列表中添加第一事务记录,第一事务记录中包括该事务的标识和该事务的第一条数据库日志(即第一数据库日志)的存储地址。
[0075]S204、若第一数据库日志不为事务在执行时生成的第一条数据库日志,则数据库系统将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址。
[0076]其中,第二数据库日志为事务在执行时生成的第一数据库日志的前一条数据库日
)■'、O
[0077]在该事务继续执行的过程中,将会生成其他数据库日志。
[0078]当第一数据库日志不是该事务执行时生成的第一条数据库日志时,则需要更新活跃事务列表中该事务的第一事务记录,具体的,将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址。即事务在执行过程中,活跃事务列表中的第一事务记录只记录该事务最新生成的一条数据库日志的信息,示例性的,可以记录该事务最新生成的一条数据库日志的存储地址,因为事务在执行过程中生成的每一条数据库日志的日志记录中都保存了该日志的上一条日志的存储地址,因此,当事务发生回滚时,可以通过活跃事务列表中记录的最新的数据库日志的信息,回溯找到该事务的所有数据库日志记录。
[0079]S205、数据库系统在提交事务列表中添加第二事务记录。
[0080]其中,提交事务列表用于记录已经执行完毕的事务,第二事务记录至少包括事务的标识和第三数据库日志存储地址,第三数据库日志为事务执行完毕后生成的所有数据库日志中最后生成的一条数据库日志。
[0081]当一个事务执行完毕,数据库系统会对该事务进行事务提交操作,即将该执行完毕的事务的最后一条数据库日志进行记录,在提交事务列表中添加该事务的第二事务记录,第二事务记录中包括了该事务的标识以及该事务的第三数据库日志(最后一条数据库日志)的存储地址。
[0082]S206、数据库系统删除活跃事务列表中的第一事务记录。
[0083]事务已经执行完毕后,就不属于当前活跃的事务,因此,需要将该事务在活跃事务列表中的第一事务记录删除。
[0084]需要说明的是,S205和S206的执行没有先后顺序,即可以在删除该事务在活跃事务列表中的第一事务记录后,再在提交事务列表中添加将该事务的第二事务记录;或者,在提交事务列表中添加该事务的第二事务记录后,再删除该事务在活跃事务列表中的第一事务记录。
[0085]需要补充的是,数据库系统会对提交事务列表中的数据库日志记录进行定期删除,具体的,当提交的事务对数据库所做的修改已经保存在数据库之后,就可以对提交事务列表中的数据库日志记录进行删除,或者在将NVM中的数据库日志进行回收或者删除时,同时删除对应的事务在提交事务列表中的信息。
[0086]如图3所示,该管理数据库日志的方法还可以包括:
[0087]S207、数据库系统获取预设日志序号。
[0088]S208、若事务已执行完毕,且第三日志序号小于等于预设日志序号,则数据库系统删除NVM内存储的事务在执行时生成的所有数据库日志,以及提交事务列表中的第二事务记录。
[0089]其中,第三日志序号为第三数据库日志的日志序号,并且第三数据库日志为事务执行完毕后生成的所有数据库日志中最后生成的一条数据库日志。
[0090]需要说明的是,当数据库系统发生检查点时,可选的,数据库系统可以获取预设的日志序号,以获取的预设日志序号作为检查点发生的界限,对日志序号小于预设日志序号的所有已经提交的数据库日志进行回收或者删除,从而使得回收或者删除的数据库日志所占用的存储空间可以被再次利用,同时删除提交事务列表中相应的事务的第二事务记录。
[0091]还需要说明的是,如果预设日志序号大于当前正在执行的事务已经生成的任意一条数据库日志的日志序号,则数据库系统将保留当前正在执行的事务的所有数据库日志记录。
[0092]可选的,S207和S208是在数据库系统发生检查点时才需要的步骤,并不是所有事务执行时所必须的。
[0093]本发明实施例提供另一种管理数据库日志的方法,如图4所示,为该方法的流程示意图,包括:
[0094]S301、数据库系统获取第一数据库日志和第一数据库日志存储地址。
[0095]其中,第一数据库日志为事务在执行时生成的任意一条数据库日志。
[0096]S302、数据库系统根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM。
[0097]S303、若第一数据库日志为事务在执行时生成的第一条数据库日志,则数据库系统在活跃事务列表中添加第一事务记录。
[0098]其中,活跃事务列表用于记录当前正在执行的事务,第一事务记录至少包括事务的标识和第一数据库日志存储地址。
[0099]S304、若第一数据库日志不为事务在执行时生成的第一条数据库日志,则数据库系统将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址。
[0100]其中,第二数据库日志为事务在执行时生成的第一数据库日志的前一条数据库日
)■'、O
[0101]需要说明的是,S301-S304与上述S201-S204的描述相同,此处不再赘述。
[0102]S305、数据库系统获取事务回滚信息。
[0103]需要说明的是,一个事务在提交之前,即一个事务在执行过程中可能会发生事务回滚。事务回滚即对当前正在执行的事务已经执行的操作进行撤销,并删除当前正在执行的事务生成的所有数据库日志记录。
[0104]S306、数据库系统根据事务回滚信息,对事务进行回滚,并删除NVM内存储的事务在执行时生成的所有数据库日志,以及活跃事务列表中的第一事务记录。
[0105]事务在执行过程中,数据库系统发生异常或者各种故障时,会导致该正在执行的事务发生回滚。正在执行的事务发生回滚时,数据库系统需要删除NVM内存储的正在执行的事务生成的所有数据库日志,同时,还需要在活跃事务列表中删除该事务的第一事务记录,事务发生回滚即认为该事务从未执行。
[0106]示例性的,数据库系统发生异常时,当前正在执行的数据生成了三条数据库日志,在活跃事务列表中记录了第三条数据库日志的存储地址,因此,数据库系统可以根据活跃事务列表中记录的第三条数据库日志,在NVM中找到该事务存储的第三条数据库日志,根据第三条数据库日志中记录的上一条数据库日志的存储地址找到该事务存储的第二条数据库日志,进而找到该事务的第一条数据库日志,并将它们全部删除,以使得没有成功提交的事务所生成的数据库日志全部回滚,即认为该事务从未被执行。
[0107]本发明实施例提供另一种管理数据库日志的方法,如图5所示,为该方法的流程示意图,包括:
[0108]S401、数据库系统获取第一数据库日志和第一数据库日志存储地址。
[0109]其中,第一数据库日志为事务在执行时生成的数据库日志中的任意一条数据库日
)■'、O
[0110]S402、数据库系统根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM。
[0111]S403、若第一数据库日志为事务在执行时生成的第一条数据库日志,则数据库系统在活跃事务列表中添加第一事务记录。
[0112]其中,活跃事务列表用于记录当前正在执行的事务,第一事务记录至少包括事务的标识和第一数据库日志存储地址。
[0113]S404、若第一数据库日志不为事务在执行时生成的第一条数据库日志,则数据库系统将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址。
[0114]其中,第二数据库日志为事务在执行时生成的第一数据库日志的前一条数据库日
)■'、O
[0115]S405、数据库系统在提交事务列表中添加第二事务记录。
[0116]其中,提交事务列表用于记录已经执行完毕的事务,第二事务记录至少包括事务的标识和第三数据库日志存储地址,第三数据库日志为事务执行完毕后生成的所有数据库日志中最后生成的一条数据库日志。
[0117]S406、数据库系统删除活跃事务列表中的第一事务记录。
[0118]需要说明的是,S401-S406与上述S201-S206的描述相同,在此不再赘述。
[0119]S407、数据库系统获取事务恢复信息。
[0120]S408、数据库系统根据事务恢复信息,对事务进行恢复。
[0121]需要说明的是,事务在执行完毕并提交后,且在事务生成的数据库日志写入数据库之前,如果数据库系统发生异常,则在数据库系统重启时,需要进行数据库恢复。即按照事务在执行时生成数据库日志的顺序对数据库进行恢复。
[0122]示例性的,当事务在执行完毕并提交后,且在事务生成的数据库日志写入数据库之前,如果数据库系统发生异常时,数据库系统在重启时,就会对数据库进行恢复,具体的,如果有多个提交的事务,都没有写入数据库,则数据库系统根据提交事务列表中的第二事务记录获取所有提交事务的数据库日志,根据日志序号的先后顺序对这些事务进行恢复,以使得数据库系统中数据的信息与实际执行的结果保持一致,需要说明的是,由于多个事务在执行时有可能是交叉执行的,因此它们的日志序号也是交叉的,在进行数据库恢复时,是按照日志序号单调连续递增的顺序恢复的,比如,数据库系统需要对两个事务进行恢复,其中,第一事务提交时生成了 3条数据库日志,日志序号分别为20000,20003, 20004 ;第二事务提交时生成了 4条数据库日志,日志序号分别为20001,20002, 20005, 20006 ;在数据库系统恢复时,按照日志序号为20000,20001, 20002, 20003, 20004, 20005, 20006的顺序对这两个事务对数据库的修改过程进行恢复。即数据库系统在恢复时,是根据日志序号从小到大的顺序对所有需要恢复的事务的数据库日志进行恢复的。
[0123]本发明实施例提供一种管理数据库日志的方法,包括:获取第一数据库日志和第一数据库日志存储地址,其中,第一数据库日志为事务在执行时生成的数据库日志中的任意一条数据库日志;根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM。
[0124]基于上述实施例的描述,采用NVM来存储数据库日志,由于NVM的非易失性,使得数据库日志可以在NVM上长久保存,并且由于本发明技术方案没有现有技术中的日志缓冲区,不存在排它锁,因此,可以更加高效的对数据库日志进行并行管理,提高数据库系统的性能。
[0125]实施例三
[0126]本发明实施例提供一种管理数据库日志的装置,如图6所示,包括:
[0127]第一获取模块10,用于获取第一数据库日志和第一数据库日志存储地址,其中,第一数据库日志为多个事务在执行时任意一个事务生成的任意一条数据库日志。
[0128]存储模块11,用于根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM,其中,NVM允许多个第一数据库日志并行存储。
[0129]如图7所示,该装置还包括:
[0130]第一添加模块12,用于根据第一数据库日志存储地址,将第一数据库日志存储至NVM之后,若第一数据库日志为事务在执行时生成的第一条数据库日志,则在活跃事务列表中添加第一事务记录,其中,活跃事务列表用于记录当前正在执行的事务,第一事务记录至少包括事务的标识和第一数据库日志存储地址。
[0131]更新模块13,用于若第一数据库日志不为事务在执行时生成的第一条数据库日志,则将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址,其中,第二数据库日志为事务在执行时生成的第一数据库日志的前一条数据库日志。
[0132]如图8所示,该装置还包括:
[0133]第二添加模块14,用于在活跃事务列表中添加第一事务记录,或者将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址之后,在提交事务列表中添加第二事务记录,其中,提交事务列表用于记录已经执行完毕的事务,第二事务记录至少包括事务的标识和第三数据库日志存储地址,第三数据库日志为事务执行完毕后生成的所有数据库日志中最后生成的一条数据库日志。
[0134]删除模块15,用于在提交事务列表中添加第二事务记录之后,删除活跃事务列表中的第一事务记录。
[0135]如图9所示,该装置还包括:
[0136]第二获取模块16,用于在活跃事务列表中添加第一事务记录,或者将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址之后,获取事务回滚信息。
[0137]执行模块17,用于根据事务回滚信息,对事务进行回滚,并删除NVM内存储的事务在执行时生成的所有数据库日志,以及活跃事务列表中的第一事务记录。
[0138]第二获取模块16,还用于在提交事务列表中添加第二事务记录之后,获取事务恢复信息。
[0139]执行模块17,还用于根据事务恢复信息,对事务进行恢复。
[0140]第三数据库日志至少包括第三日志序号。
[0141]第二获取模块16,还用于获取预设日志序号。
[0142]执行模块17,还用于若事务已执行完毕,且第三日志序号小于等于预设日志序号,则删除NVM内存储的事务在执行时生成的所有数据库日志,以及提交事务列表中的第二事务记录。
[0143]本发明实施例提供一种管理数据库日志的装置,包括:第一获取模块,获取第一数据库日志和第一数据库日志存储地址,其中,第一数据库日志为事务在执行时生成的数据库日志中的任意一条数据库日志;存储模块,根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM。
[0144]基于上述实施例的描述,采用NVM来存储数据库日志,由于NVM的非易失性,使得数据库日志可以在NVM上长久保存,并且由于本发明技术方案没有现有技术中的日志缓冲区,不存在排它锁,因此,可以更加高效的对数据库日志进行并行管理,提高数据库系统的性能。
[0145]实施例四
[0146]本发明实施例提供一种管理数据库日志的装置,如图10所示,包括:
[0147]处理器20,用于获取第一数据库日志和第一数据库日志存储地址,其中,第一数据库日志为多个事务在执行时任意一个事务生成的任意一条数据库日志。
[0148]NVM(非易失性存储器)21,用于存储第一数据库日志,活跃事务列表和提交事务列表,其中,NVM允许多个第一数据库并行存储。
[0149]处理器20,还用于根据第一数据库日志存储地址,将第一数据库日志存储至NVM之后,若第一数据库日志为事务在执行时生成的第一条数据库日志,则在活跃事务列表中添加第一事务记录,其中,活跃事务列表用于记录当前正在执行的事务,第一事务记录至少包括事务的标识和第一数据库日志存储地址。
[0150]处理器20,还用于若第一数据库日志不为事务在执行时生成的第一条数据库日志,则将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址,其中,第二数据库日志为事务在执行时生成的第一数据库日志的前一条数据库日志。
[0151]处理器20,还用于在活跃事务列表中添加第一事务记录,或者将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址之后,在提交事务列表中添加第二事务记录,其中,提交事务列表用于记录已经执行完毕的事务,第二事务记录至少包括事务的标识和第三数据库日志存储地址,第三数据库日志为事务执行完毕后生成的所有数据库日志中最后生成的一条数据库日志。
[0152]处理器20,还用于在提交事务列表中添加第二事务记录之后,删除活跃事务列表中的第一事务记录。
[0153]处理器20,还用于在活跃事务列表中添加第一事务记录,或者将第一事务记录中的第二数据库日志存储地址更新为第一数据库日志存储地址之后,获取事务回滚信息。
[0154]处理器20,还用于根据事务回滚信息,对事务进行回滚,并删除NVM内存储的事务在执行时生成的所有数据库日志,以及活跃事务列表中的第一事务记录。
[0155]处理器20,还用于在提交事务列表中添加第二事务记录之后,获取事务恢复信息。
[0156]处理器20,还用于根据事务恢复信息,对事务进行恢复。
[0157]第三数据库日志至少包括第三日志序号。
[0158]处理器20,还用于获取预设日志序号。
[0159]处理器20,还用于若事务已执行完毕,且第三日志序号小于等于预设日志序号,则删除NVM内存储的事务在执行时生成的所有数据库日志,以及提交事务列表中的第二事务记录。
[0160]本发明实施例提供一种管理数据库日志的方法,包括:处理器,获取第一数据库日志和第一数据库日志存储地址,其中,第一数据库日志为事务在执行时生成的数据库日志中的任意一条数据库日志;根据第一数据库日志存储地址,将第一数据库日志存储至非易失性存储器NVM。
[0161]基于上述实施例的描述,采用NVM来存储数据库日志,由于NVM的非易失性,使得数据库日志可以在NVM上长久保存,并且由于本发明技术方案没有现有技术中的日志缓冲区,不存在排它锁,因此,可以更加高效的对数据库日志进行并行管理,提高数据库系统的性能。
[0162]本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0163]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
【权利要求】
1.一种管理数据库日志的方法,其特征在于,包括: 获取第一数据库日志和第一数据库日志存储地址,其中,所述第一数据库日志为多个事务在执行时任意一个事务生成的任意一条数据库日志; 根据所述第一数据库日志存储地址,将所述第一数据库日志存储至非易失性存储器NVM,其中,所述NVM允许多个所述第一数据库日志并行存储。
2.根据权利要求1所述的管理数据库日志的方法,其特征在于,所述根据所述第一数据库日志存储地址,将所述第一数据库日志存储至NVM之后,所述方法还包括: 若所述第一数据库日志为所述事务在执行时生成的第一条数据库日志,则在活跃事务列表中添加第一事务记录,其中,所述活跃事务列表用于记录当前正在执行的事务,所述第一事务记录至少包括所述事务的标识和所述第一数据库日志存储地址; 若所述第一数据库日志不为所述事务在执行时生成的第一条数据库日志,则将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址,其中,所述第二数据库日志为所述事务在执行时生成的所述第一数据库日志的前一条数据库日志。
3.根据权利要求2所述的管理数据库日志的方法,其特征在于,所述在活跃事务列表中添加第一事务记录,或者所述将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址之后,所述方法还包括: 在提交事务列表中添加第二事务记录,其中,所述提交事务列表用于记录已经执行完毕的事务,所述第二事务记录至少包括所述事务的标识和第三数据库日志存储地址,所述第三数据库日志为所述事务执行完毕后生成的所有数据库日志中最后生成的一条数据库曰志; 删除所述活跃事务列表中的第一事务记录。
4.根据权利要求2所述的管理数据库日志的方法,其特征在于,所述在活跃事务列表中添加第一事务记录,或者所述将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址之后,所述方法还包括: 获取事务回滚?目息; 根据所述事务回滚信息,对所述事务进行回滚,并删除所述NVM内存储的所述事务在执行时生成的所有数据库日志,以及所述活跃事务列表中的第一事务记录。
5.根据权利要求3所述的管理数据库日志的方法,其特征在于,所述在提交事务列表中添加第二事务记录之后,所述方法还包括: 获取事务恢复信息; 根据所述事务恢复信息,对所述事务进行恢复。
6.根据权利要求1-5中任意一项所述的管理数据库日志的方法,其特征在于,所述第三数据库日志至少包括第三日志序号; 所述方法还包括: 获取预设日志序号; 若所述事务已执行完毕,且所述第三日志序号小于等于所述预设日志序号,则删除所述NVM内存储的所述事务在执行时生成的所有数据库日志,以及所述提交事务列表中的第二事务记录。
7.—种管理数据库日志的装置,其特征在于,包括: 第一获取模块,用于获取第一数据库日志和第一数据库日志存储地址,其中,所述第一数据库日志为多个事务在执行时任意一个事务生成的任意一条数据库日志; 存储模块,用于根据所述第一数据库日志存储地址,将所述第一数据库日志存储至非易失性存储器NVM,其中,所述NVM允许多个所述第一数据库日志并行存储。
8.根据权利要求7所述的管理数据库日志的装置,其特征在于,所述装置还包括: 第一添加模块,用于根据所述第一数据库日志存储地址,将所述第一数据库日志存储至NVM之后,若所述第一数据库日志为所述事务在执行时生成的第一条数据库日志,则在活跃事务列表中添加第一事务记录,其中,所述活跃事务列表用于记录当前正在执行的事务,所述第一事务记录至少包括所述事务的标识和所述第一数据库日志存储地址; 更新模块,用于若所述第一数据库日志不为所述事务在执行时生成的第一条数据库日志,则将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址,其中,所述第二数据库日志为所述事务在执行时生成的所述第一数据库日志的前一条数据库日志。
9.根据权利要求8所述的管理数据库日志的装置,其特征在于,所述装置还包括: 第二添加模块,用于所述在活跃事务列表中添加第一事务记录,或者所述将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址之后,在提交事务列表中添加第二事务记录,其中,所述提交事务列表用于记录已经执行完毕的事务,所述第二事务记录至少包括所述事务的标识和第三数据库日志存储地址,所述第三数据库日志为所述事务执行完毕后生成的所有数据库日志中最后生成的一条数据库日志; 删除模块,用于在提交事务列表中添加第二事务记录之后,删除所述活跃事务列表中的第一事务记录。
10.根据权利要求8所述的管理数据库日志的装置,其特征在于,所述装置还包括: 第二获取模块,用于所述在活跃事务列表中添加第一事务记录,或者所述将所述第一事务记录中的第二数据库日志存储地址更新为所述第一数据库日志存储地址之后,获取事务回滚信息; 执行模块,用于根据所述事务回滚信息,对所述事务进行回滚,并删除所述NVM内存储的所述事务在执行时生成的所有数据库日志,以及所述活跃事务列表中的第一事务记录。
11.根据权利要求9所述的管理数据库日志的装置,其特征在于, 所述第二获取模块,还用于所述在提交事务列表中添加第二事务记录之后,获取事务恢复信息; 所述执行模块,还用于根据所述事务恢复信息,对所述事务进行恢复。
12.根据权利要求7-11中任意一项所述的管理数据库日志的装置,其特征在于,所述第三数据库日志至少包括第三日志序号; 所述第二获取模块,还用于获取预设日志序号; 所述执行模块,还用于若所述事务已执行完毕,且所述第三日志序号小于等于所述预设日志序号,则删除所述NVM内存储的所述事务在执行时生成的所有数据库日志,以及所述提交事务列表中的第二事务记录。
【文档编号】G06F17/30GK104516959SQ201410791085
【公开日】2015年4月15日 申请日期:2014年12月18日 优先权日:2014年12月18日
【发明者】文继军, 徐文韬, 聂愿愿 申请人:杭州华为数字技术有限公司