【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
问题:
在OceanBase中,日志流数量怎么计算
我理解的是与租户和副本的数量有关系的,及单个节点的日志流数量为日志流=租户*副本数量
1 个赞
论坛小助手
#3
根据文档库中的信息,日志流的数量计算与租户的配置、分区表的设计以及副本分布策略密切相关。以下是详细的解答:
1. 日志流的基本概念
日志流(Log Stream, 简称 LS)是 OceanBase 数据库 V4.x 版本引入的重要概念,用于组织和管理事务提交的基本单位。每个日志流包含若干 Tablet 和有序的 Redo 日志流,支持多副本同步,并通过 Paxos 协议保证数据一致性。
参考文档:
- 文档标题: 日志流和副本概述
- 段落标题: 日志流和副本概述
2. 日志流数量的影响因素
日志流的数量主要由以下因素决定:
-
租户的 Primary Zone 和 Locality 配置
租户的总日志流个数取决于 Primary Zone 和 Locality 的配置。Locality 定义了副本的分布规则,Primary Zone 决定了主副本的优先部署区域。
-
分区表的设计
每个分区对应一个 Tablet,而 Tablet 又归属于某个日志流。因此,分区越多,可能的日志流数量也会增加。
-
广播日志流的存在
如果租户中存在复制表,则会创建一个特殊的广播日志流。广播日志流会在每个 OBServer 节点上部署一个副本,进一步影响日志流的数量。
参考文档:
- 文档标题: 副本介绍 → 日志流介绍 → 广播日志流
- 段落标题: 广播日志流
3. 单节点上的日志流数量计算
单个节点上的日志流数量并不是简单的“租户 * 副本数量”的乘积关系,而是受到以下规则的影响:
参考文档:
- 文档标题: 日志流和副本概述 → 数据均衡
- 段落标题: 数据均衡
4. 总结公式
虽然没有一个固定的公式可以直接计算日志流的数量,但可以通过以下步骤估算:
-
确定租户数量
每个租户可能有多个日志流,具体数量取决于分区表设计和业务需求。
-
考虑广播日志流
如果租户中有复制表,则会额外增加一个广播日志流。
-
评估副本分布
根据 Locality 配置和副本均衡策略,计算每个节点上的日志流副本数量。
最终,单个节点上的日志流数量 = (普通日志流 + 广播日志流)* 副本分布比例。
5. 注意事项
如果您需要更具体的计算结果,建议提供以下信息:
- 当前使用的 OceanBase 数据库版本。
- 租户的 Locality 和 Primary Zone 配置。
- 分区表的设计详情(如分区数量、是否为复制表等)。
希望以上信息对您有所帮助!
检索到的文档如下:
- 日志流
- 日志流和副本概述
- 创建备租户前准备
- 副本介绍
- 租户介绍
- 备份架构
- OceanBase 数据库整体架构
3 个赞
甯空
#5
每个日志流包含若干 Tablet 和有序的 Redo 日志流。
譬如:
PRIMARY_ZONE = random, UNIT_NUM =2,即2-2-2架构。
是6个日志流,加一个特殊广播日志流LS ID=1, 最终共计7个日志流。
1 个赞
日志流不是主从副本同步的数据流量称之为日志流吗,
那按照您的计算公式就相当于适合每个zone下的节点数量有关系是吗?
1 个赞
论坛小助手
#8
根据文档库中的信息,您的问题可能存在一些误解。实际上,日志流(Log Stream, 简称 LS)并不是指主从副本同步的数据流量,而是 OceanBase 数据库中用于组织和管理数据变更的逻辑实体。以下是详细的解释:
1. 日志流的定义
日志流是由 OceanBase 数据库自动创建和管理的实体,它代表了一批数据的集合,包括若干 Tablet 和有序的 Redo 日志流。Redo 日志记录了数据库中的所有变更操作,而日志流则是这些变更操作的逻辑容器。
参考文档:
- 文档标题: 日志流和副本概述
- 段落标题: 日志流和副本概述
2. 日志流与主从副本的关系
日志流的多个副本会分布在不同的节点上,通过 Paxos 协议实现多副本间的日志同步,保证数据的一致性和高可用性。每个日志流的主副本(Leader)负责处理写入请求,并将 Redo 日志同步到其他从副本(Follower)。因此,日志流本身并不是“数据流量”,而是数据同步的基本单位。
参考文档:
3. 日志流数量与 Zone 的关系
日志流的数量确实与 Zone 的配置有关,但并不是简单的“每个 Zone 下的节点数量”的线性关系。具体影响因素包括:
-
租户的 Locality 配置
Locality 定义了副本的分布规则,决定了每个日志流的副本在不同 Zone 中的部署方式。
-
Primary Zone 的设置
Primary Zone 决定了主副本的优先部署区域,可能会影响某些日志流的分布。
-
分区表的设计
如果租户中有大量分区表,则会创建更多的 Tablet 和日志流,进一步增加日志流的数量。
参考文档:
- 文档标题: 副本介绍 → 日志流介绍 → 查看日志流的位置信息和角色信息
- 段落标题: 查看日志流的位置信息和角色信息
4. 总结
日志流的数量并不直接等于“每个 Zone 下的节点数量”。它受到租户配置、分区表设计以及副本分布策略的综合影响。如果您需要更具体的计算结果,建议提供以下信息:
- 租户的 Locality 和 Primary Zone 配置。
- 分区表的设计详情(如分区数量、是否为复制表等)。
希望以上信息能够帮助您更好地理解日志流的概念及其数量的计算方法!
检索到的文档如下:
- 日志流
- 日志流和副本概述
- 集群架构
- 副本介绍
- OceanBase 数据库整体架构
- 本地事务
- 日志同步问题
- 日志流副本概述
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
甯空
#9
是的,每个zone,每个observer正常有写入,就会有日志流。
主要是根据你的PRIMARY_ZONE设置,如果配置成zone1;zone2,zone3,那么zone2,zone3里的observer都没有日志流了。
如果配置时zone1,zone2,zone3
那他的日志流分布是不是这样?

甯空
#11
是的,zone1上面所有leader变更形成有序日志流,同步到zone2,zone3上面的follwer上面。
zone2,zone3上面的leader也同理。
本着知所以然,也要知所其以然,为什么做日志流?
1. V3.x 单机分区数瓶颈的问题
在 OceanBase V3.x 中,事务提交的基本单位是分区(Partition),每个分区是一个独立的Paxos组。这种设计在单机分区数较多时会带来以下问题:
- RPC 开销增大:Clog 主备 Keep Alive 的 RPC 调用随着分区数增加而显著增加。
- 后台任务开销高:后台定时任务需要遍历所有分区,导致 CPU 和内存资源消耗过高。
- 内存占用增加:每个分区都会占用一定的内存资源,当分区数达到一定规模(如 5w 分区)时,节点重启恢复时间和 DDL 执行时间显著变长。
- 容灾恢复时间过长:由于分区数多,系统在容灾场景下的恢复时间也会显著增加,影响 RPO(恢复点目标)。
因此,V3.x的单机分区数上限虽然可以达到50w,但实际生产环境中推荐值仅为3w,超过该阈值会导致性能下降和服务质量降低。
2. V4.x 日志流的设计目标
为了解决上述问题,OceanBase V4.x 引入了日志流(Log Stream)的概念,将事务提交的基本单位从分区升级为日志流。其核心设计目标包括:
- 减少资源消耗:通过合并多个分区的日志流,降低 RPC 调用、后台任务开销和内存占用。
- 提升性能:优化事务提交机制,减少分布式事务的复杂性。
- 增强扩展性:支持更大规模的分区数,同时保持系统的高性能和稳定性。
参阅 https://mp.weixin.qq.com/s/x9dr-i_atL8ubi5cGwAeag
所以只有主副本才会产生日志流吗?那上面2-2-2架构,不应该只产生2+1=3个日志流吗?
来轩
#15
日志流的个数跟你提供读写请求的节点数有关系,如果2-2-2 架构,我只需要两个节点对外提供读写,即设置了primary zone zone1;zone2,zone3 那么日志流就是2个,如果4个节点对外提供读写服务那么就是4个日志流,依次类推