分类: DB2/Informix
2007-12-06 09:04:17
informix基础知识:关于物理日志和逻辑日志的中文文档
1.物理日志
物理日志的作用在于保持一批dbspace页的前映象。这些“前映象”代表了所有数据在物理上与逻辑上都保持一致的这样一个时刻。将物理日志中的前映象与逻辑日志中的逻辑日志记录结合起来,可以恢复数据库自上一次已知的一致点以来发生的所有事务。这样的已知的一致点称为检查点。在快速恢复过程中,第一步首先用到物理日志,将整个系统恢复在Online中最近一次检查点时所处的物理一致的状态。
1) 物理日志的存放地址
当IDS初始化时,将会在rootdbs中创建物理日志。
当IDS处于静止方式时,用户可将物理日志从一个dbspace移到另一个dbspace中。用户这样做的目的是想尽量提高效率。
物理日志的位置由配置文件中的PHYSDBS参数指定。这个参数仅当用户决定将物理日志从 rootdbs中移到另一个dbspace中才必须被改变;否则,该参数在缺省情况下,仍包含着rootdbs的名称。
物理日志的大小由配置参数PHYSFILE指定,以kb为单位。用户可以修改物理日志文件的位置和大小。
2) 物理日志的内容
物理日志是一组连续的磁盘页面,每一个都包含有一个特别的Online页的副本。物理日志中的页面可以是除了blobspace中blobpage以外的其它任何Online页面。甚至可对应于系统开销页,例如chunk空闲链页、blobspace空闲映象页、blobspace位图页等等,这些页也必须在其上的数据被修改并刷新到磁盘上之前被复制到物理日志中去。
Blobspace blobpage并不出现在物理日志中,这是因为blob采用与其它数据类型不同方法记录日志。
3) 物理日志前映象
在某一次检查点后,某个页面第一次被修改时,该页的“前映象”将被写入共享内存中的物理日志缓冲区。在该被修改的页从共享内存刷新到磁盘上之前,该页的“前映象”应首先被刷新到磁盘上物理日志中。需要注意的是,仅当对页面的第一次修改才会导致往物理日志中写“前映象”。先写日志文件原则是为快速恢复所必需的。
4) 检查点操作逻辑地清空物理日志
每次Online检查点操作以后,物理日志中逐渐被填上发生修改的“前映象”。当再一次检查点操作发生以后的瞬间,这时Online中的数据在物理上是一致的,这时也就再不需要原来的Online物理日志中的“前映象”了。(这对于继续执行的事务也同样适用。如果某一个这样的事务需要执行回滚操作,则执行回滚所需的信息都已包含在逻辑日志文件中了。)在检查点操作完成时,Online将逻辑上清空逻辑日志,Online仅仅重置物理日志中的指针,标明下一组“前映象”所存储的起始位置。Online 循环使用物理日志,不断地覆盖那些已过时的数据。
检查点操作是唯一可以清空物理日志的机制。如果物理日志75%的空间已被占用,则Online将启动一次检查点操作。
2.逻辑日志
逻辑日志文件的作用在于自上一次Online archive以来,对Online数据所发生的变化进行记录。Online把逻辑日志分成三个或更多个相互分离的磁盘空间,每磁盘空间称为一个逻辑日志文件。相应于每一个逻辑日志文件有一个唯一标识号。
1) 逻辑日志与快速恢复
Online使用逻辑日志可以恢复自上一次已知的物理一致点以来发生的所有事务。这一已知的物理一致点在Online系统中称为检查点。快速恢复中,当Online使用物理日志将整个系统恢复到上一次检查点时所处的状态以后,Online将使用逻辑日志记录将整个系统恢复到最近一次逻辑日志记录时刻的逻辑一致性状态,这实际上是快速恢复的第二步骤。
2) 逻辑日志与数据恢复
将逻辑日志文件的备份磁带与最近一次的Online的archive结合在一起,可以将Online系统重新恢复到最近一次逻辑日志记录时的状态。
3) 逻辑日志文件被循环使用
Online通过标识一个逻辑日志文件为used(使用)状态来保护逻辑日志文件不被覆盖,直至该文件被备份到磁带上并且快速恢复已不再需要该逻辑日志文件时为止。当一个逻辑日志文件中的所有记录对应的事务都已完成时,快速恢复过程将不再需要该逻辑日志文件。如果上面所说的两个重要条件都已被满足,即逻辑日志文件已被备份到磁带上,并且快速恢复也已不再需要该逻辑日志文件,这时Online将该逻辑日志文件标记为free(空闲)状态,该文件也就可以被再次用以填如逻辑日志记录。
在 Online处理过程中,Online按数字顺序依次填充空闲的(即状态为free)的逻辑日志文件。当第一个逻辑日志文件变满时,Online接着开始填充下一个逻辑日志文件,如果下一次逻辑日志的状态为“used”而不是“free”,则正常的Online处理将被挂起。Online不能跳过该标记为“used”状态的逻辑日志文件而去填充别的空闲的日志文件。保证空闲的逻辑日志文件在Online处理过程中总可以被得到,这是Online管理员的职责。
Online至少需要三个逻辑日志文件以便循环使用逻辑日志文件,当一个逻辑日志文件在接收当前记录时,Online有可能正将另一个日志文件往磁带上备份,第三个日志文件是当前日志文件已满,而备份另一个日志文件的工作尚未完成时所需要的。(这个使用三个逻辑日志缓冲区的考虑是类似的)。
4) 逻辑日志文件:标识号与备份
逻辑日志备份带以逻辑日志所包含的唯一数值标记。每当一个日志文件填满时,逻辑日志标识号就增加数值1。例如,如果一个Online系统包含三个逻辑日志文件,则相应的三个日志文件的标识号为1、2、3。当逻辑日志文件1第一次被释放以便循环使用时,它将变为逻辑日志文件4,第二次它又将变为逻辑日志文件7。
5) 逻辑日志文件的内容
逻辑日志文件中包含下述五种类型的记录:
所有数据库的SQL定义语句。
检查点记录。
有关配置修改的记录。
对于那些创建时使用日志登录的的SQL数据操纵语句。
有关某个日志登录状态变化的记录。
即使没有一个创建时使用了事务日志登录,在处理过程中,Online也会将前面三种类型的记录写入逻辑日志文件。逻辑日志记录可以跨越Online的整个页面,但它们却不能跨越逻辑日志文件。
6) 逻辑日志文件的配置
当Online初始化时将会在rootdbs中创建逻辑日志文件。在Online处于静止方式以后,用户可以从rootdbs中删除一个或多个逻辑日志文件,也可以往另一个dbspace中增加一个或多个逻辑日志文件。用户有可能为了提高效率而这样做。
在Online磁盘空间初始化以后,用户就不能再修改逻辑日志文件的大小了。如果一逻辑日志文件被删除,则由该逻辑日志文件占据的空间将被释放掉,并被链入chunk空闲链页。
7) 大小与数目方面的限制
Online管理员决定每一个逻辑日志文件的大小,以及分配给整个逻辑日志的磁盘空间的大小。每个逻辑日志文件至少要被分配到200K的磁盘空间。
逻辑日志文件的最小数目为3,最大数目则由一页上可容纳的逻辑日志描述字的数目所决定。对于一个2K大小的页,最大的日志文件数目为60。
8) 影响逻辑日志文件填充速度的因素
下列四个因素会影响一个事务的大小与持续时间:
逻辑日志文件记录的大小
事务打开时间的长度
CPU与逻辑日志的活动级别(Actirity Level)
事务回滚的频率(Freqency)
逻辑日志记录的长度随处理操作与当前Online的环境而变化。一般来讲,数据行越长,逻辑日志记录也就越大。
不仅如此,其它一些因素还会影响单一事务的大小与操作时间。例如,一条Alter table语句将会为每一次往新修改了的表中的插入操作生成一条逻辑日志记录。数据行的大小与表的大小都将会影响生成的逻辑日志记录的数目与大小。然而在一些情况下,数据行大小是无关紧要的。例如,逻辑日志中的一条检查点记录将包含对应于所有检查点发生时刻仍处于打开状态的事务的项目。检查点记录的大小仅仅反映了当前的数据库活动的级别与类型,而不涉及到任何特定的行的大小。
事务的持续时间也是一个不能为用户所控制的主要的变化量。一个应用,也许并不需要过多的逻辑日志记录空间,但如果用户允许事务在很长时间内保持打开,这时就可能造成生成长事务错误。在保证不产生长事务错误的前提下,可用的逻辑日志空间越多,就有可能允许越长的事务保持打开状态。
CPU的能力可能影响Online服务器进程完成事务的能力。重复地往逻辑日志文件写,增加了每个服务器进程完成事务所需的CPU时间。逻辑日志操作的增加,可能还隐含着同时增加了对逻辑日志锁与latch的竞争。(也正是这个原因,用户才有可能需要将逻辑日志文件从rootdbs移到另一个不太活跃的dbspace中去)。
回滚的频率也影响着逻辑日志被填充的速率。尽管回滚记录很小,但回滚本身也需要逻辑日志文件空间。而且,回滚也增加对逻辑日志的操作。