论文部分内容阅读
摘要: 传统的基于日志的恢复技术会对系统性能产生很大影响。本文提出内存数据库系统快速日志恢复技术,它控制日志的产生数量,使得在系统崩溃并重新启动时,能以最快的速度恢复到系统崩溃前的最近一致点上。
关键词: ISDB系统 日志恢复 检查点 数据镜象
一、引言
内存数据库(ISDB)的所有操作都作用于内存数据库的主拷贝上,数据库极易遭到操作系统和应用软件造成的破坏,因此ISDB的恢复技术十分关键。日志(Logging)恢复是传统的ISDB恢复技术之一,它在大量事务吞吐量情况下造成的日志暴增会带来很大问题,会对ISDB性能产生很大影响。ISDB系统快速日志恢复技术是在不阻碍系统正常运行的情况下,控制日志的产生数量,使得在系统崩溃并重新启动时,能以最快的速度恢复到系统崩溃前的最近一致点上。
二、系统构架设计
快速恢复模型中,事务处理模块负责根据用户请求产生事务,并由事务管理器调度。事务管理器将负责各个事务的日志记录交给日志产生规则处理。检查点模块根据日志产生规则才产生的日志数量动态调整检查点启动时间。当日志记录数达到一定值时,检查点程序启动。它读取所有日志记录,交给日志筛选器。日志筛选器根据筛选算法,从当前所有日志项中筛选出实际有效的日志记录,并将这些有效日志记录交给日志分发结点。日志分发结点主要做两项工作:第一是将日志传送给日志磁盘管理器,由其负责将日志回写到日志磁盘上;第二是将日志传送给备份更新发生器,备份更新发生器利用快速恢复算法,触发各类更新操作,根据日志更新磁盘上的数据。
该快速恢复模型具有如下的特点。
1.快速恢复模型以日志驱动方式做检查点,异步更新磁盘上的备份数据镜象。
2.系统只维护全局Redo日志,以Redo日志来驱动备份更新发生器,各个事务维护私有Redo日志和Undo日志,在事务提交时将私有Redo日志写入全局Redo日志中。
3.使用日志筛选算法,进一步减少Redo日志的数量,提升检查点程序的性能。
4.备份数据镜象只反应已提交事务的更新状态,因此在系统重载时不需要回退未提交的事务。
5.快速恢复算法为并发重载算法。在系统恢复过程中,它能继续接受新事务的请求。
三、快速日志驱动检查点
快速日志驱动检查点的基本思想是检查点程序仍然由日志来驱动,根据读取到的日志项来更新数据镜象上的内容,维持数据镜象与内存中数据库的基本同步。但是,与以往日志驱动检查点算法不同的是,它通过日志产生规则和日志筛选算法两个策略克服了以往日志驱动检查点算法中日志数量可能过快增长的问题。
1.日志产生规则
快速日志驱动检查点算法中设立的日志产生规则是:系统中日志被分为全局日志和私有日志两类。系统只维护全局Redo日志,而不维护Undo日志,由事务自身维护私有的Redo日志和Undo日志。在事务提交时,依照事务提交的先后顺序,系统将事务的私有Redo日志添加到全局Redo日志中。因此,在事务运行过程中,会产生Redo日志和Undo日志。Redo日志用于在系统恢复过程中,重做已提交事务。而Undo日志用于在事务Abort时回退事务,或者在系统恢复过程中回退未提交的事务。如果恢复模型的设计能够保证系统恢复过程中,没有需要回退的未提交事务,那么系统只需要读取Redo日志而不需要读取Undo日志。因而系统只需要维护全局的Redo日志,而不需要维护Undo日志,将Undo日志交给事务自身维护,Undo日志只用于事务自身Abort时回退。这样就可以减少全局日志的总量。
全局日志和私有日志在事务的内存空间中,各自维护自己的私有Redo日志和Undo日志。在非易失性内存(NVM)上,ISDB系统开辟全局Redo日志缓冲区,让事务在提交时私有Redo日志写入该缓冲区。检查点程序将定期读取日志缓冲区中的数据,将日志写入磁盘,并驱动检查点程序更新磁盘镜象数据。
各事务将按如下阶段操作日志:
(1)事务启动时,需要在事务的各自空间内建立私有Redo日志和私有Undo日志,并将在私有Redo日志中写入事务启动记录。
(2)事务运行过程中,事务的每次更新操作,需要在私有Redo日志中添加Redo记录,并在私有Undo日志中添加Undo记录。
(3)事务提交时,需要按如下步骤完成:
①向事务的私有Redo日志内添加事件Commit记录。
②将事务的私有Redo日志写入全局Redo日志中。
③释放事务的私有Redo日志和私有Undo日志,釋放事务所占用的其他资源,完成提交。
(4)事务Abort时,需要按照如下步骤完成:
①事务反向扫描私有Undo日志,回退事务的更新操作。
②释放事务的私有Redo日志和私有Undo日志,释放事务所占用的其他资源,结束事务。
由此可见,事务只在提交时才将私有Redo日志写入全局日志缓冲区。从而保证了检查点程序运行时,用户只看到已提交事务的Redo日志,这时磁盘上的数据镜象也只反映已提交事务的更新操作。
2.日志筛选算法
用日志产生规则能明显减少日志产生的数量,但是在更新事务吞吐量较大的情况下,检查点程序从全局日志缓冲区读取Redo日志时,仍然可能会面对Redo日志量过大的问题。产生的原因是这样的:如果对一份数据作两次更新操作,那么两个事务各自产生一条对同一物理地址上值更新的物理日志,但只有第2次更新事务产生的日志为有效的。笔者利用日志筛选算法来避免日志量过大问题。日志筛选器需要关注物理日志中被修改值的地址的相关性。对相同修改地址的物理日志,笔者依据日志的提交顺序进行筛选。为加快日志的筛选速度,笔者将全日志缓冲区划分为多个区域,这将日志记录中操作地址具有空间相关性的日志按照所属事务的提交顺序聚合在一个区域内,能加速日志筛选算法的筛选速度。这使得在筛选过程中,用户只需在小范围内(也就是一个区域)就可搜索到被筛选的日志,当全局Redo日志缓冲区中的某一个区域满时,就唤醒检查点程序,将这一区域中的Redo日志写入日志磁盘,并驱动备份更新发生器更新磁盘上的数据镜象。
四、快速恢复算法
在系统崩溃后,ISDB系统需要通过恢复过程,将数据库恢复到崩溃前的最近一致点上。在系统恢复过程中,重载程序将数据从磁盘镜象上加载到ISDB系统中,同时根据日志,重做(Redo)或者取消(Undo)部分事务,来恢复数据库的一致性。
快速恢复算法步骤如下:
1.当系统崩溃重启时,先启动日志检查和分配程序,检查非易失性内存(NVM)中提供给事务提交时用于写入私有Redo日志的缓冲区中是否有完整写入的Redo日志。如果有完整的Redo日志,则日志检查和分配程序将这些完整的日志分配到全局Redo日志缓冲区的不同区域中。
2.统计全局Redo日志缓冲区中的日志数量,并标记这些日志。Redo日志缓冲区中的日志将被用于恢复内存中ISDB系统的一致性,同时也要用于维护磁盘上数据镜象的一致性。
3.恢复程序从磁盘数据镜象上加载一些重要的系统表以后,ISDB系统可以启动,并可以接受新事务的请求。系统的正常事务处理和系统恢复过程同时进行。
4.触发检查点程序从全局Redo日志缓冲区中读取日志,驱动备份更新发生器更新磁盘上的数据镜象。在这过程中,驱动备份更新发生器向缓冲区管理区询问将被更新的记录所在的镜象数据页面是否已经被加载到内存中。如果已经被加载,则不但需要更新磁盘上的镜象数据页,还需要更新内存中的数据页面;如果全局Redo日志缓冲区中所有被标记的日志都已经被用于驱动备份更新发生器,那么此时备份更新发生器可以告诉重载程序恢复工作已经完成,没有其它镜象页面需要更新。
5.ISDB在接受新事务的请求时,对于事务的所访问到的数据,如果数据还没有被加载内存中时,则系统向重载程序要求将所需数据从磁盘镜象上加载到内存中。此时,重载程序先要检查要求加载的数据页面是否会被备份更新发生器修改。如果是,则需要等待备份更新发生器更新镜象页面后再加载到内存中,否则就直接将镜象页面加载到内存中。
6.当所有镜象都加载完成后,ISDB系统恢复过程结束。
五、结语
恢复技术是保证内存数据库运行可靠的关键技术。传统日志恢复技术由于存在产生过多不必要的日志的缺点,笔者研究了一种新的日志恢复技术来尽可能的减少日志数量,并在此基础上提出了快速日志恢复算法。恢复技术算法可以大大地节约系统的资源。然而,内存数据库恢复是一个十分复杂而庞大的技术,所以该方法还有待完善。
参考文献:
[1]刘云生,廖国琼,付蔚.一个支持实时内存数据库的恢复系统[J].小型微型计算机系统,2003,24,(3).
[2]龙玉国,耿协坚.嵌入式实时内存数据库恢复子系统的设计[J].计算机工程与应用,2004,17.
[3]宋广华,杨长生.基于混合日志的内存数据库恢复子系统[J].浙江大学学报(理学版),2001,28,(3).
关键词: ISDB系统 日志恢复 检查点 数据镜象
一、引言
内存数据库(ISDB)的所有操作都作用于内存数据库的主拷贝上,数据库极易遭到操作系统和应用软件造成的破坏,因此ISDB的恢复技术十分关键。日志(Logging)恢复是传统的ISDB恢复技术之一,它在大量事务吞吐量情况下造成的日志暴增会带来很大问题,会对ISDB性能产生很大影响。ISDB系统快速日志恢复技术是在不阻碍系统正常运行的情况下,控制日志的产生数量,使得在系统崩溃并重新启动时,能以最快的速度恢复到系统崩溃前的最近一致点上。
二、系统构架设计
快速恢复模型中,事务处理模块负责根据用户请求产生事务,并由事务管理器调度。事务管理器将负责各个事务的日志记录交给日志产生规则处理。检查点模块根据日志产生规则才产生的日志数量动态调整检查点启动时间。当日志记录数达到一定值时,检查点程序启动。它读取所有日志记录,交给日志筛选器。日志筛选器根据筛选算法,从当前所有日志项中筛选出实际有效的日志记录,并将这些有效日志记录交给日志分发结点。日志分发结点主要做两项工作:第一是将日志传送给日志磁盘管理器,由其负责将日志回写到日志磁盘上;第二是将日志传送给备份更新发生器,备份更新发生器利用快速恢复算法,触发各类更新操作,根据日志更新磁盘上的数据。
该快速恢复模型具有如下的特点。
1.快速恢复模型以日志驱动方式做检查点,异步更新磁盘上的备份数据镜象。
2.系统只维护全局Redo日志,以Redo日志来驱动备份更新发生器,各个事务维护私有Redo日志和Undo日志,在事务提交时将私有Redo日志写入全局Redo日志中。
3.使用日志筛选算法,进一步减少Redo日志的数量,提升检查点程序的性能。
4.备份数据镜象只反应已提交事务的更新状态,因此在系统重载时不需要回退未提交的事务。
5.快速恢复算法为并发重载算法。在系统恢复过程中,它能继续接受新事务的请求。
三、快速日志驱动检查点
快速日志驱动检查点的基本思想是检查点程序仍然由日志来驱动,根据读取到的日志项来更新数据镜象上的内容,维持数据镜象与内存中数据库的基本同步。但是,与以往日志驱动检查点算法不同的是,它通过日志产生规则和日志筛选算法两个策略克服了以往日志驱动检查点算法中日志数量可能过快增长的问题。
1.日志产生规则
快速日志驱动检查点算法中设立的日志产生规则是:系统中日志被分为全局日志和私有日志两类。系统只维护全局Redo日志,而不维护Undo日志,由事务自身维护私有的Redo日志和Undo日志。在事务提交时,依照事务提交的先后顺序,系统将事务的私有Redo日志添加到全局Redo日志中。因此,在事务运行过程中,会产生Redo日志和Undo日志。Redo日志用于在系统恢复过程中,重做已提交事务。而Undo日志用于在事务Abort时回退事务,或者在系统恢复过程中回退未提交的事务。如果恢复模型的设计能够保证系统恢复过程中,没有需要回退的未提交事务,那么系统只需要读取Redo日志而不需要读取Undo日志。因而系统只需要维护全局的Redo日志,而不需要维护Undo日志,将Undo日志交给事务自身维护,Undo日志只用于事务自身Abort时回退。这样就可以减少全局日志的总量。
全局日志和私有日志在事务的内存空间中,各自维护自己的私有Redo日志和Undo日志。在非易失性内存(NVM)上,ISDB系统开辟全局Redo日志缓冲区,让事务在提交时私有Redo日志写入该缓冲区。检查点程序将定期读取日志缓冲区中的数据,将日志写入磁盘,并驱动检查点程序更新磁盘镜象数据。
各事务将按如下阶段操作日志:
(1)事务启动时,需要在事务的各自空间内建立私有Redo日志和私有Undo日志,并将在私有Redo日志中写入事务启动记录。
(2)事务运行过程中,事务的每次更新操作,需要在私有Redo日志中添加Redo记录,并在私有Undo日志中添加Undo记录。
(3)事务提交时,需要按如下步骤完成:
①向事务的私有Redo日志内添加事件Commit记录。
②将事务的私有Redo日志写入全局Redo日志中。
③释放事务的私有Redo日志和私有Undo日志,釋放事务所占用的其他资源,完成提交。
(4)事务Abort时,需要按照如下步骤完成:
①事务反向扫描私有Undo日志,回退事务的更新操作。
②释放事务的私有Redo日志和私有Undo日志,释放事务所占用的其他资源,结束事务。
由此可见,事务只在提交时才将私有Redo日志写入全局日志缓冲区。从而保证了检查点程序运行时,用户只看到已提交事务的Redo日志,这时磁盘上的数据镜象也只反映已提交事务的更新操作。
2.日志筛选算法
用日志产生规则能明显减少日志产生的数量,但是在更新事务吞吐量较大的情况下,检查点程序从全局日志缓冲区读取Redo日志时,仍然可能会面对Redo日志量过大的问题。产生的原因是这样的:如果对一份数据作两次更新操作,那么两个事务各自产生一条对同一物理地址上值更新的物理日志,但只有第2次更新事务产生的日志为有效的。笔者利用日志筛选算法来避免日志量过大问题。日志筛选器需要关注物理日志中被修改值的地址的相关性。对相同修改地址的物理日志,笔者依据日志的提交顺序进行筛选。为加快日志的筛选速度,笔者将全日志缓冲区划分为多个区域,这将日志记录中操作地址具有空间相关性的日志按照所属事务的提交顺序聚合在一个区域内,能加速日志筛选算法的筛选速度。这使得在筛选过程中,用户只需在小范围内(也就是一个区域)就可搜索到被筛选的日志,当全局Redo日志缓冲区中的某一个区域满时,就唤醒检查点程序,将这一区域中的Redo日志写入日志磁盘,并驱动备份更新发生器更新磁盘上的数据镜象。
四、快速恢复算法
在系统崩溃后,ISDB系统需要通过恢复过程,将数据库恢复到崩溃前的最近一致点上。在系统恢复过程中,重载程序将数据从磁盘镜象上加载到ISDB系统中,同时根据日志,重做(Redo)或者取消(Undo)部分事务,来恢复数据库的一致性。
快速恢复算法步骤如下:
1.当系统崩溃重启时,先启动日志检查和分配程序,检查非易失性内存(NVM)中提供给事务提交时用于写入私有Redo日志的缓冲区中是否有完整写入的Redo日志。如果有完整的Redo日志,则日志检查和分配程序将这些完整的日志分配到全局Redo日志缓冲区的不同区域中。
2.统计全局Redo日志缓冲区中的日志数量,并标记这些日志。Redo日志缓冲区中的日志将被用于恢复内存中ISDB系统的一致性,同时也要用于维护磁盘上数据镜象的一致性。
3.恢复程序从磁盘数据镜象上加载一些重要的系统表以后,ISDB系统可以启动,并可以接受新事务的请求。系统的正常事务处理和系统恢复过程同时进行。
4.触发检查点程序从全局Redo日志缓冲区中读取日志,驱动备份更新发生器更新磁盘上的数据镜象。在这过程中,驱动备份更新发生器向缓冲区管理区询问将被更新的记录所在的镜象数据页面是否已经被加载到内存中。如果已经被加载,则不但需要更新磁盘上的镜象数据页,还需要更新内存中的数据页面;如果全局Redo日志缓冲区中所有被标记的日志都已经被用于驱动备份更新发生器,那么此时备份更新发生器可以告诉重载程序恢复工作已经完成,没有其它镜象页面需要更新。
5.ISDB在接受新事务的请求时,对于事务的所访问到的数据,如果数据还没有被加载内存中时,则系统向重载程序要求将所需数据从磁盘镜象上加载到内存中。此时,重载程序先要检查要求加载的数据页面是否会被备份更新发生器修改。如果是,则需要等待备份更新发生器更新镜象页面后再加载到内存中,否则就直接将镜象页面加载到内存中。
6.当所有镜象都加载完成后,ISDB系统恢复过程结束。
五、结语
恢复技术是保证内存数据库运行可靠的关键技术。传统日志恢复技术由于存在产生过多不必要的日志的缺点,笔者研究了一种新的日志恢复技术来尽可能的减少日志数量,并在此基础上提出了快速日志恢复算法。恢复技术算法可以大大地节约系统的资源。然而,内存数据库恢复是一个十分复杂而庞大的技术,所以该方法还有待完善。
参考文献:
[1]刘云生,廖国琼,付蔚.一个支持实时内存数据库的恢复系统[J].小型微型计算机系统,2003,24,(3).
[2]龙玉国,耿协坚.嵌入式实时内存数据库恢复子系统的设计[J].计算机工程与应用,2004,17.
[3]宋广华,杨长生.基于混合日志的内存数据库恢复子系统[J].浙江大学学报(理学版),2001,28,(3).