图: 已落实事务期间写入的逻辑日志记录
有些逻辑日志记录必须立即从逻辑日志缓冲区清空;对于另外一些记录,清空却不是关键的。
协调者的落实工作记录(COMMIT 记录)包含启动两阶段落实协议所需的所有信息。它还在协调者的主机上发生故障的情况下充当自动恢复的起点。因为该记录对于恢复很关键,所以不允许它保留在逻辑日志缓冲区中。协调者必须立即清空 COMMIT 逻辑日志记录。
上图中的参与者必须立即清空 PREPARE 和 COMMIT 这两条逻辑日志记录。清空 PREPARE 记录可确保快速恢复能在参与者的主机发生故障时,确定此参与者是否为全局事务的一部分。 作为恢复的一部分,参与者可以查询协调者以了解该事务的最终布置。
清空参与者的 COMMIT 记录可确保在参与者的主机发生故障时,参与者具有关于事务的所执行操作的记录。要理解该信息为何至关重要,请考虑在写入 PREPARE 记录之后但在清空 COMMIT 记录之前参与者崩溃的情况。在快速恢复后,PREPARE 记录得以复原,但 COMMIT 记录丢失(因为在发生故障时它位于逻辑日志缓冲区中)。PREPARE 记录的存在将启动对协调者的有关事务的查询。但是,协调者会对该事务一无所知,因为协调者在接收到参与者的确认(已执行落实)后就结束了事务。在这种情况中,参与者将把缺少信息解释为回滚事务的最后指示。两阶段落实协议需要立即清空参与者的 COMMIT 记录,以防止出现此类误解。