频繁出现OBServer 非预期的内部错误

根据文档库中的信息,可以对您提到的问题进行详细解答。

在 OceanBase 数据库中,Leader 副本同步过来的 Redo 日志与 Follower 副本回放后记录的 Redo 日志确实是同一个日志。那么,在 Leader 副本同步 Redo 日志到 Follower 副本后,Follower 副本是否会在回放任务完成后再次记录一遍这个事务的 Redo 日志呢?

答案是不会。以下是具体原因和机制:

  1. Redo 日志的同步与持久化
    当 Leader 副本生成 Redo 日志并通过 Multi-Paxos 协议同步到 Follower 副本时,Follower 副本会立即将这些日志持久化到本地磁盘。这个过程确保了即使 Leader 副本发生故障,Follower 副本仍然能够通过已接收到的日志恢复数据。
    参考文档: [Redo 日志 → 概述](片段标题: Redo 日志 → 概述)

  2. Redo 日志的回放
    Follower 副本接收到并持久化 Redo 日志后,会对其进行回放以保持与 Leader 副本的数据一致性。回放的过程包括以下几个步骤:

创建事务上下文:为每个事务创建一个事务上下文。
还原操作历史:根据 Redo 日志的内容,在事务上下文中还原出操作历史。
提交事务:当回放到 Commit 日志时,事务提交。

  1. 回放后的处理
    在回放任务完成后,Follower 副本不会再次记录一遍这个事务的 Redo 日志。这是因为:

Redo 日志已经持久化:在 Leader 副本同步 Redo 日志到 Follower 副本时,Follower 副本已经将这些日志持久化到本地磁盘。回放任务只是根据这些日志重新执行事务的操作,并不会生成新的日志。
避免重复记录:如果在回放任务完成后再次记录一遍 Redo 日志,会导致日志的重复记录,增加存储开销并降低系统性能。OceanBase 数据库设计时已经考虑到了这一点,因此不会在回放任务完成后再次记录 Redo 日志。

总结
在 Leader 副本同步 Redo 日志到 Follower 副本后,Follower 副本不会在回放任务完成后再次记录一遍这个事务的 Redo 日志。这是因为 Redo 日志已经在同步过程中被持久化到本地磁盘,回放任务只是根据这些日志重新执行事务的操作,并不会生成新的日志。这种设计避免了日志的重复记录,降低了存储开销并提高了系统性能。

如果您需要更详细的解释或有其他相关问题,请随时联系 OceanBase 技术支持团队获取进一步帮助。

检索到的文档如下:

  1. Redo 日志
  2. OceanBase 数据库整体架构
  3. 日志存储服务
  4. 副本介绍
  5. 日志流

关于这个内部错误的告警,在集群正常运行的情况下,会有什么影响吗?是否可忽略掉这个告警? @论坛小助手

根据文档库中的信息,可以对您提到的问题进行详细解答。

在 OceanBase 数据库中,Leader 副本同步过来的 Redo 日志与 Follower 副本回放后记录的 Redo 日志是同一个日志。这意味着 Follower 副本在接收到 Leader 副本同步过来的 Redo 日志后,会将其持久化到本地磁盘,并在回放任务完成后不再重复记录该事务的 Redo 日志。

以下是具体的解释:

  1. Redo 日志的同步与持久化

当 Leader 副本生成 Redo 日志并通过 Multi-Paxos 协议同步到 Follower 副本时,Follower 副本会将这些日志持久化到本地磁盘。这个过程确保了即使 Leader 副本发生故障,Follower 副本仍然能够通过已接收到的日志恢复数据。
参考文档: [Redo 日志 → 概述](片段标题: Redo 日志 → 概述)

  1. Redo 日志的回放

Follower 副本在接收到 Redo 日志后,会对其进行回放以保持与 Leader 副本的数据一致性。回放的过程包括以下几个步骤:

创建事务上下文:为每个事务创建一个事务上下文。
还原操作历史:根据 Redo 日志的内容,在事务上下文中还原出操作历史。
提交事务:当回放到 Commit 日志时,事务提交。

  1. 回放完成后是否还会记录一遍 Redo 日志?

不会。Follower 副本在回放完成后,不会再重复记录该事务的 Redo 日志。原因如下:

Redo 日志已经持久化:在 Leader 副本同步 Redo 日志时,Follower 副本已经将其持久化到本地磁盘。因此,不需要在回放完成后再次记录。
避免冗余:重复记录 Redo 日志会导致磁盘空间浪费和性能下降。OceanBase 数据库设计时已经考虑到了这一点,因此在回放完成后不会再次记录 Redo 日志。

总结
在 OceanBase 数据库中,Follower 副本在接收到 Leader 副本同步过来的 Redo 日志后,会将其持久化到本地磁盘,并在回放任务完成后不再重复记录该事务的 Redo 日志。这种设计确保了数据一致性和高可用性,同时避免了冗余记录带来的性能开销。

如果您需要更详细的解释或有其他相关问题,请随时联系 OceanBase 技术支持团队获取进一步帮助。

具体信息可参考以下文档:

  1. Redo 日志
  2. OceanBase 数据库整体架构
  3. 日志存储服务
  4. 副本介绍
  5. 日志流
  6. 日志流和副本概述

关于出现OBServer 非预期的内部错误,具体报错信息如下
[errcode=-4388] Unexpected internal error happen,please checkout the internal errcode(errcode=-4389),file=“ob_ls_adapter.cpp” ,line_no=106,info=“single replay task cost too much time.replay may be delayed” 。这个内部错误的告警,在集群正常运行的情况下,会有什么影响吗?是否可忽略掉这个告警? @论坛小助手

根据文档库中的信息,可以对您提到的问题进行详细解答。

在 OceanBase 数据库中,Leader 副本同步过来的 Redo 日志与 Follower 副本回放后记录的 Redo 日志是同一个日志。这意味着 Follower 副本在接收到 Leader 副本发送的 Redo 日志后,会将其持久化到本地磁盘,并在回放任务完成后不再重复记录该事务的 Redo 日志。

以下是具体的解释:

  1. Redo 日志的同步与持久化

当 Leader 副本生成 Redo 日志并通过 Multi-Paxos 协议同步到 Follower 副本时,Follower 副本会将这些日志持久化到本地磁盘。这个过程确保了即使 Leader 副本发生故障,Follower 副本仍然能够通过已接收到的日志恢复数据。
参考文档: [Redo 日志 → 概述](片段标题: Redo 日志 → 概述)

  1. Redo 日志的回放

Follower 副本在接收到 Redo 日志后,会对其进行回放以保持与 Leader 副本的数据一致性。回放的过程包括以下几个步骤:

创建事务上下文:为每个事务创建一个事务上下文。
还原操作历史:根据 Redo 日志的内容,在事务上下文中还原出操作历史。
提交事务:当回放到 Commit 日志时,事务提交。

  1. 回放完成后是否还会记录 Redo 日志?

在回放任务完成后,Follower 副本不会再次记录该事务的 Redo 日志。原因如下:

Redo 日志已经持久化:在 Leader 副本同步 Redo 日志时,Follower 副本已经将其持久化到本地磁盘。因此,不需要在回放完成后再次记录。
数据一致性保证:通过回放 Redo 日志,Follower 副本上的数据状态与 Leader 副本一致。再次记录 Redo 日志不会改变数据状态,也没有必要。

总结
在 OceanBase 数据库中,Leader 副本同步过来的 Redo 日志与 Follower 副本回放后记录的 Redo 日志是同一个日志。Follower 副本在接收到 Leader 副本发送的 Redo 日志后,会将其持久化到本地磁盘,并在回放任务完成后不再重复记录该事务的 Redo 日志。

如果您需要更详细的解释或有其他相关问题,请随时联系 OceanBase 技术支持团队获取进一步帮助。

更多信息请查看:

  1. Redo 日志
  2. OceanBase 数据库整体架构
  3. 日志存储服务
  4. 副本介绍
  5. 日志流
  6. 高可用 FAQ

关于出现这个内部错误的告警,在集群正常运行的情况下,会有什么影响吗?是否可忽略掉这个告警? @论坛小助手

根据文档库中的信息,可以对您提到的问题进行详细解答。

问题分析

在 OceanBase 数据库中,Leader 副本生成 Redo 日志并通过 Multi-Paxos 协议同步到 Follower 副本。Follower 副本接收到 Redo 日志后,会将其持久化到本地磁盘,并通过回放机制确保数据一致性。

关键点:是否会在回放任务完成后再次记录 Redo 日志?

答案是:不会再次记录 Redo 日志。

详细解释

  1. Redo 日志的同步与持久化

    • 当 Leader 副本生成 Redo 日志后,通过 Multi-Paxos 协议将日志同步到 Follower 副本。
    • Follower 副本接收到 Redo 日志后,会立即将其持久化到本地磁盘(Clog 文件)。此时,Follower 副本上已经存在该事务的 Redo 日志。
    • 这一步确保了即使 Leader 副本发生故障,Follower 副本仍然可以通过已接收到的日志恢复数据。
  2. Redo 日志的回放

    • Follower 副本在接收到 Redo 日志并持久化后,会启动回放任务。回放的任务是根据 Redo 日志的内容重新执行事务的操作,以确保副本上的数据状态与 Leader 副本一致。
    • 回放过程中,Follower 副本会创建事务上下文、还原操作历史,并在回放到 Commit 日志时提交事务。
  3. 是否会再次记录 Redo 日志?

    • 在回放任务完成后,Follower 副本不会再次记录该事务的 Redo 日志。因为:
      • Redo 日志已经在 Leader 副本生成并通过 Paxos 协议同步到了 Follower 副本。
      • Follower 副本的职责是接收和回放 Redo 日志,而不是重新生成 Redo 日志。
      • 回放完成后,Follower 副本上的数据状态已经与 Leader 副本一致,无需再记录额外的日志。
  4. 总结流程

    • Leader 副本生成 Redo 日志。
    • Leader 副本通过 Paxos 协议将 Redo 日志同步到 Follower 副本。
    • Follower 副本接收到 Redo 日志后,将其持久化到本地磁盘。
    • Follower 副本启动回放任务,根据 Redo 日志重新执行事务的操作。
    • 回放完成后,Follower 副本不会再次记录该事务的 Redo 日志。

参考文档

  • [Redo 日志 → 概述](片段标题: Redo 日志 → 概述)
  • [Redo 日志 → 日志的产生](片段标题: Redo 日志 → 日志的产生)
  • [Redo 日志 → 日志的回放](片段标题: Redo 日志 → 日志的回放)

总结

在 OceanBase 数据库中,Follower 副本在接收到 Leader 副本同步过来的 Redo 日志后,会将其持久化到本地磁盘并进行回放。回放任务完成后,Follower 副本不会再次记录该事务的 Redo 日志,因为 Redo 日志已经在 Leader 副本生成并通过 Paxos 协议同步完成。

如果您还有其他疑问,请随时联系 OceanBase 技术支持团队获取进一步帮助。

具体信息可参考以下文档:

  1. Redo 日志
  2. OceanBase 数据库整体架构
  3. 日志存储服务
  4. 副本介绍
  5. 日志流
  6. 日志流和副本概述
1 个赞

ddl 是否会记录redo日志? @论坛小助手

根据文档库中的信息,可以对您提到的 Redo 日志在 Follower 副本中的处理过程进行详细解答。

  1. Leader 同步过来的 Redo 日志与 Follower 回放后记录的 Redo 日志的关系
    如前所述,Leader 副本生成的 Redo 日志通过 Multi-Paxos 协议同步到 Follower 副本。Follower 副本接收到这些日志后,会将其持久化到本地磁盘,并进行回放以保持与 Leader 副本的数据一致性。

  2. Follower 副本是否会再次记录 Redo 日志?
    在 Follower 副本中,不会再次记录同一个事务的 Redo 日志。具体原因如下:

Redo 日志的持久化:
当 Follower 副本接收到 Leader 副本发送的 Redo 日志后,会立即将其持久化到本地磁盘。这个过程确保了即使在回放过程中发生故障,系统仍然可以通过已持久化的日志恢复数据。因此,Redo 日志在接收时就已经被记录下来。

Redo 日志的回放:
Follower 副本在回放 Redo 日志时,只是根据日志内容重新执行事务的操作,以更新本地数据状态。回放的过程并不会生成新的 Redo 日志,而是直接修改数据文件(SSTable)或内存中的数据结构(MemStore)。

Commit 标志的处理:
当回放到 Commit 日志时,事务提交,表示该事务的所有操作已完成。此时,Follower 副本上的数据状态已经与 Leader 副本一致,无需再次记录 Redo 日志。

参考文档: [Redo 日志 → 日志的回放](片段标题: Redo 日志 → 日志的回放)

  1. 总结
    在 Follower 副本中,Redo 日志的处理过程如下:

Leader 副本生成 Redo 日志并通过 Multi-Paxos 协议同步到 Follower 副本。
Follower 副本接收到 Redo 日志后,立即将其持久化到本地磁盘。
Follower 副本根据 Redo 日志的内容进行回放,更新本地数据状态。
回放过程中不会再次记录 Redo 日志,只是根据日志内容重新执行事务的操作。

因此,在 Follower 副本中,不会在回放任务完成后再次记录同一个事务的 Redo 日志。Redo 日志在接收时已经被记录下来,回放的过程只是根据日志内容更新数据状态。

如果您需要更详细的解释或有其他相关问题,请随时联系 OceanBase 技术支持团队获取进一步帮助。

详情请参考:

  1. Redo 日志
  2. OceanBase 数据库整体架构
  3. 日志存储服务
  4. 副本介绍
  5. 日志流
  6. 日志流和副本概述