数据盘空间不对

【 使用环境 】测试环境
ob数据库版本:4.2.1.8 用于存放ocp的元数据库
ocp版本:版本号: 4.3.6-20250815135607

【问题描述】数据盘空间怎么计算出来的, 目前看显示不对呢?
【复现路径】


但是为何这里显示数据盘为28.16G呢?

1 个赞

这个查一下

select /*+ READ_CONSISTENCY(WEAK) */
a.zone,
a.svr_ip,
b.status,
cpu_capacity,
cpu_assigned_max,
cpu_capacity-cpu_assigned_max as cpu_free,
round(memory_limit /1024/1024/1024 ,2) as memory_total_gb,
round(mem_capacity /1024/1024/1024 ,2) as mem_capacity,
round((memory_limit-mem_capacity) /1024/1024/1024 ,2) as system_memory_gb,
round(mem_assigned /1024/1024/1024 ,2) as mem_assigned_gb,
round((mem_capacity-mem_assigned) /1024/1024/1024 ,2) as memory_free_gb,
round(log_disk_capacity /1024/1024/1024 ,2) as log_disk_capacity_gb,
round(log_disk_assigned /1024/1024/1024 ,2) as log_disk_assigned_gb,
round((log_disk_capacity-log_disk_assigned) /1024/1024/1024 ,2) as log_disk_free_gb,
round((data_disk_capacity /1024/1024/1024 ),2) as data_disk_capacity_gb,
round((DATA_DISK_ALLOCATED /1024/1024/1024 ),2) as data_disk_allocate_gb,
round((data_disk_in_use /1024/1024/1024 ),2) as data_disk_used_gb,
round((data_disk_capacity-data_disk_in_use) /1024/1024/1024 ,2) as data_disk_free_gb
from oceanbase.gv$ob_servers a
join oceanbase.DBA_OB_SERVERS b on a.zone=b.zone\G;


@旭辉

分配了25GB,capacity是28.04GB

按照参数,初始化的时候是25G,然后datafile_next是5G,那这里不应该是30G吗?最大只能使用50G

你这里可能是30G,可能被其它非OB的文件占用了一部分空间,剩余可用(空间能力)只有28.04G

这个不是预分配的吗?按理说预分配的后,这个磁盘,即使有其他的文件占用了一些空间,也不应该影响到这个值的

1 个赞

前面表述的不太准确,预分配的是25GB,你du下sstable目录下的block_file文件应该是25GB,datafile_next受隐藏参数_datafile_usage_upper_bound_percentage=90(默认)控制,意思是当数据所需的磁盘使用达到datafile_size的90%时会自动增长,所以你这里没到30GB,
DATA_DISK_CAPACITY 表示 OBServer 节点上数据盘空间总大小,并非指预分配的空间

1 个赞

支持一下

image


看目前的我的操作系统的空间值,也对不上哈,可能因为我这就一块盘混合使用导致计算规则不太对,

我找了个单独的数据盘,显示的data_disk_capacity_gb大小是磁盘当前使用的,好像也不是空间总大小


@旭辉

确实不对

标记 学习

在 Shared-Nothing 模式下,data_disk_capacity = 最大宏块数量 × 宏块大小,其中最大宏块数量由当前数据文件大小、磁盘可用空间、保留空间和配置的最大文件大小共同决定。

1 个赞

辞霜老师给出了代码中的计算逻辑,
从空间表现上可以按下面这样计算

当操作系统上的这个数据盘没有放其它东西时,只给OB的data使用时,当设置
datafile_maxsize <= DATA_DISK_ALLOCATED 时 ,DATA_DISK_CAPACITY取值DATA_DISK_ALLOCATED;
操作系统磁盘空间> = datafile_maxsize> DATA_DISK_ALLOCATED 时,DATA_DISK_CAPACITY取值 datafile_maxsize;

操作系统磁盘空间< datafile_maxsize 时,DATA_DISK_CAPACITY取值 操作系统磁盘空间;

当操作系统上的这个数据盘放其它东西时,当设置
datafile_maxsize <= DATA_DISK_ALLOCATED 时 ,DATA_DISK_CAPACITY取值DATA_DISK_ALLOCATED;

操作系统磁盘空闲空间+DATA_DISK_ALLOCATED>= datafile_maxsize > DATA_DISK_ALLOCATED时,DATA_DISK_CAPACITY取值 datafile_maxsize;

操作系统磁盘空闲空间+DATA_DISK_ALLOCATED < datafile_maxsize 时,DATA_DISK_CAPACITY近似取值 操作系统磁盘空闲空间+DATA_DISK_ALLOCATED

上面所说的“OBServer 节点上数据盘空间总大小” 并非指操作系统上磁盘空间的大小,是说OCP上这里的“数据盘”,是指OB数据当前可用的空间

2 个赞