redo日志与WAL的关系是什么

1.请问observer源码中,在写memtable之前会写redo日志吗?

2.如果会写redo日志,那么写redo的入口函数是什么?
我的理解是如何是写redo日志,那么应该是在写memtable之前,那么写redo的入口函数是什么或者是哪个模块。

3.ob中redo日志与传统的WAL之间的区别是什么?

望解答,谢谢。

3 个赞

@论坛小助手

1 个赞
  1. redo日志与WAL的关系:WAL(Write-Ahead Logging)是一种用于提高数据库可靠性的技术,它要求所有对数据库的修改在被应用到实际数据之前,都要先记录到日志文件中。redo日志是WAL机制的一部分,专门用于记录数据库中的数据变更操作。在数据库重启后,通过重放redo日志,可以将数据库恢复到最近一次提交的状态。
  2. Observer源码中,在写memtable之前会写redo日志。这是为了确保数据的持久性和一致性,即使在写入memtable时发生故障,也可以通过重放redo日志来恢复数据。
  3. 写redo日志的入口函数可能位于ObTxSeq或ObRowWriter类中,具体的函数名可能类似于write_redo_log或log_redo_entry。
  4. OB中redo日志与传统WAL的区别:OceanBase采用了多副本机制,每个副本都有独立的redo日志。OceanBase使用Paxos协议来保证多个副本之间的数据同步。OceanBase的redo日志存储机制经过优化,可以高效地处理大规模数据写入,减少I/O开销。
3 个赞

您好,我后续看了下代码。写REDO日志的接口应该是PALF模块的这个地方吧。

LogStorage::writev:

LogBlockMgr::writev:

LogBlockHandler::writev

1 个赞

好像理论都相同吧,都是事务提交基本就罗盘了

学习

学习学习

谢谢分享

底层原理没有任何区别,wal是预写,日志序号会一直往下走,redo也是预分配写的,但会重新用之前用过的日志。wal日志可以一次性初始化n多个,redo就那么几个重复使用。如果从恢复重做这个概念上理解,就没什么区别了。