【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】V4.3.5
【问题描述】有大佬估算过吗?容量估算:5亿数据要约占多少磁盘空间? 备份要多少空间?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】V4.3.5
【问题描述】有大佬估算过吗?容量估算:5亿数据要约占多少磁盘空间? 备份要多少空间?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
用户的问题是关于 OceanBase V4.3.5 在生产环境中存储 5 亿数据量所需的磁盘空间以及备份这些数据所需的磁盘空间。obdiag 工具主要用于日志采集和根因分析,对于估算数据存储和备份所需的空间并不是其主要功能。不过,我们可以基于一般的经验和 OceanBase 的特性给出一个大致的估算。
通常情况下,OceanBase 数据库中每条记录的实际占用空间取决于表结构设计(例如字段类型、是否使用了压缩等)、索引数量等因素。因此,无法直接给出一个确切的答案。为了更准确地评估磁盘空间需求,您可以参考以下步骤:
建议您通过如下方式获取更精确的信息:
oceanbase.DBA_TAB_COLUMNS
等系统视图查询各列的数据类型及长度,结合业务逻辑计算单条记录大小。ANALYZE TABLE
获取表级别的统计数据。由于 obdiag 不适用于此类问题,所以这里不提供具体的 obdiag 命令。
为了能够更准确地帮助您,请提供以下信息:
附上敏捷诊断工具 obdiag 使用帮助链接
索引是分区索引, 压缩应该是OB内部的吧,备份可以采用 定期7天增量+1次全量的方式。全量后删掉增量的
我打算插入1千W数据,但是如何知道这个表的大小和占用的索引大小。以及备份的大小
根据您提供的信息,为了估算插入1千万条记录后表的大小、索引占用的空间以及备份所需的磁盘空间,您可以按照以下步骤操作:
首先需要明确表结构,包括字段类型及其长度。这有助于我们了解每条记录大致会占用多少字节。可以通过查询 oceanbase.DBA_TAB_COLUMNS
视图来获取这些信息。
SELECT
table_name,
column_name,
data_type,
char_length,
data_precision,
data_scale
FROM
oceanbase.DBA_TAB_COLUMNS
WHERE
table_name = 'YOUR_TABLE_NAME';
请将 'YOUR_TABLE_NAME'
替换为实际的表名。
OceanBase 默认会对基线数据(SSTable)进行压缩以节省存储空间。如果不确定具体使用的压缩算法,可以查看建表语句中的 COMPRESSION
参数设置或者通过系统视图查询租户级别的默认压缩函数配置。
SHOW CREATE TABLE your_table_name;
-- 或者
SELECT value FROM oceanbase.__all_sys_parameter WHERE name='default_compress_func';
对于 V4.3.x 版本,默认压缩算法为 zstd_1.3.8
。不同的压缩算法会影响最终的数据压缩比,请参考官方文档选择合适的压缩方式。
由于您提到使用了分区索引,那么除了主键索引外,还需要考虑额外创建的索引所占用的空间。通常情况下,索引的大小取决于索引列的数量及类型。对于分区索引而言,其大小还会受到分区键的影响。可以通过如下 SQL 查询现有索引的信息:
SELECT
index_name,
partitioned,
partitioning_type
FROM
oceanbase.DBA_INDEXES
WHERE
table_name = 'YOUR_TABLE_NAME';
同样地,请将 'YOUR_TABLE_NAME'
替换为实际的表名。
在生产环境之外的安全环境中,尝试插入少量具有代表性的数据(例如1万条),然后执行 ANALYZE TABLE
来更新表的统计信息。之后可以通过 information_schema.TABLES
或者 oceanbase.DBA_TABLES
查看表的实际占用空间。
INSERT INTO your_table (...) VALUES (...); -- 插入一些测试数据
ANALYZE TABLE your_table_name COMPUTE STATISTICS;
SELECT
table_name,
round(data_length/1024/1024, 2) AS data_mb,
round(index_length/1024/1024, 2) AS index_mb,
round((data_length + index_length)/1024/1024, 2) AS total_mb
FROM
information_schema.TABLES
WHERE
table_name = 'your_table_name';
这一步骤可以帮助您获得更准确的单条记录平均占用空间以及索引大小。
对于定期7天增量+1次全量的备份策略,在完成一次全量备份之后,接下来七天内的增量备份只会包含发生变化的数据部分。因此,首次全量备份时所需的空间接近于当前数据库中所有数据的总和;而后续每天的增量备份则取决于每日新增或修改的数据量。
当执行新的全量备份后,旧的增量备份文件可以根据您的管理策略被删除,从而释放相应的磁盘空间。
综上所述,为了得到更加精确的结果,请先按照上述方法收集必要的信息,并基于此做出合理的估算。如果您能提供更多关于表结构的具体细节,我也可以进一步帮助您进行更详细的分析。
详情请参考:
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
这个可以查看表的磁盘占用量 估算差不多90g吧
SELECT sum(size)/1024/1024/1024 FROM (SELECT DATABASE_NAME,TABLE_NAME,TABLE_ID,PARTITION_NAME,TABLET_ID,ROLE
FROM oceanbase.DBA_OB_TABLE_LOCATIONS ) AA full join
(SELECT distinct(TABLET_ID) ,size
FROM oceanbase.GV$OB_SSTABLES ) BB on AA.TABLET_ID=BB.TABLET_ID
WHERE AA.role=‘leader’ and AA.table_name=’${表名}’;
好的。5亿数据只有100G这么小吗?
oracle的话 数据+索引 基本要在 1.5T - 2T之间
不好估算的,跟表的字段数、是否包含lob字段等都有关系。。如果要对比oracle,那影响oracle磁盘空间的因素就更多了。建议可以把数据搞到OB中染后用上面的SQL查下占用大小,不过可以肯定OB的压缩比至少都是数倍以上。
OB的物理备份跟数据库实际占用空间一致。
没有blob。 字段主要是整形和字符串。 到时候测试下 。
主要和字段的数量 行长 是否有大字段类型等 这个只是按照一般的估算 不算索引 只是数据 还是按照查询的表的磁盘为准
我们有个表155亿,1.7T。
另外一个表197亿,才606G
这看你的截图是606g 不可能是6.6g 绝对不可能
写错了,哈哈。。0
这压缩率很夸张啊,索引占用多少知道吗?,,不知道你一条记录多大的空间, 我们单条记录一般也就不到10KB吧。不知道模拟几千万或者1亿后会是多少。
mysql我之前找过很多表分析过,一般就一条数据就0.5k-1k,有大字段的会到1.5k。10k的少啊