sstable磁盘占用比例问题

@论坛小助手
遇到一个问题:
/data是独占的,datafile_disk_percentage配置的是0,但是现在/data占用了95%,目前看都是sttable/block_file占用的,我看官网上说:
独占时,数据文件占用其所在磁盘总空间的百分比为 90%。
但是我目前观察,主节点占用95%,两个cluster节点占用82%,难道不应该都是90%吗?不能理解为什么是这样呢,以下是各节点的磁盘占用情况截图:
主节点:
2557fd300aa8dad784d0257b27f0e9a
336dfe168eff5c74c5e4c822faa7ca3

副节点1:
2384219c7ab2aebc49a5d961ff88b97
9396fb045ab59f9b5d04a2dc08bf50f

副节点2:
2384219c7ab2aebc49a5d961ff88b97
9396fb045ab59f9b5d04a2dc08bf50f

麻烦提供一份你的yaml文件 cd ~/.obd/clster/xxx/

1 个赞

config.txt (2.3 KB)
(这里去掉了密码,ip等敏感信息)

1 个赞

image
这里有设置data磁盘参数

1 个赞

也就是这里改小就可以了是吧

1 个赞

现在调小是不是已经无法让磁盘空间占用释放出来了啊?还有datafile_next的配置能给下最佳实践建议吗?

1 个赞

@论坛小助手

1 个赞

根据您的描述和提供的信息,我们可以从以下几个方面来分析和解答您的问题。

1. 关于 datafile_disk_percentage 和磁盘占用比例

您提到 /data 是独占的,并且配置了 datafile_disk_percentage=0。根据文档中的说明(参考 [datafile_disk_percentage → 使用说明](datafile_disk_percentage → 使用说明)),当 datafile_disk_percentage 配置为 0 时:

  • 如果数据文件和日志共用同一磁盘,则数据文件占用其所在磁盘总空间的百分比为 60%。
  • 如果数据文件独占磁盘,则数据文件占用其所在磁盘总空间的百分比为 90%。

因此,在您的场景中,理论上主节点和副节点的数据文件应该占用磁盘的 90%。然而,您观察到主节点占用了 95%,而两个副节点分别占用了 82%。这种差异可能由以下原因导致:

可能的原因

  1. 实际数据增长:即使初始配置为 90%,随着数据的增长,可能会超过这个比例。OceanBase 数据库在运行过程中会动态调整磁盘使用情况。
  2. 自动扩容机制:如果配置了 datafile_maxsizedatafile_next,数据文件可能会逐步扩展,导致占用比例增加。
  3. 其他因素:例如日志文件、临时文件等也可能占用部分磁盘空间。

2. 关于调小 datafile_disk_percentage 是否能释放磁盘空间

调小 datafile_disk_percentage 并不能直接释放已经占用的磁盘空间。这是因为:

  • OceanBase 数据库在初始化时会根据配置预分配磁盘空间。
  • 已经写入的数据不会因为调整配置而被删除或压缩。

如果您希望释放磁盘空间,可以考虑以下方法:

  1. 清理不必要的数据:删除不再需要的表、索引或历史数据。
  2. 清空回收站:执行以下命令清空回收站中的数据:
    PURGE RECYCLEBIN;
    
  3. 手动迁移数据:通过 OCP 或 obd 工具迁移部分数据到其他节点,以均衡磁盘使用。
  4. 调整配置并重启集群:如果确实需要调整 datafile_disk_percentage,可以通过以下命令修改配置:
    ALTER SYSTEM SET datafile_disk_percentage = 新值;
    
    然后重启集群以生效。

3. 关于 datafile_next 的最佳实践建议

datafile_next 是用于控制数据文件每次扩展的大小。根据文档中的说明(参考 配置磁盘数据文件的动态扩容),以下是关于 datafile_next 的最佳实践建议:

建议值

  • 初始值:可以根据磁盘总空间和预期数据增长速度设置一个合理的值。例如,如果磁盘总空间为 1TB,可以将 datafile_next 设置为 10GB 或更大。
  • 动态调整:如果发现磁盘扩展过于频繁,可以适当增大 datafile_next 的值;反之,如果磁盘空间充足且扩展频率较低,可以保持较小的值。

示例配置

假设磁盘总空间为 1TB,您可以尝试以下配置:

ALTER SYSTEM SET datafile_next = '10G';

注意事项

  1. 避免过小:如果 datafile_next 设置过小,可能会导致频繁的扩展操作,影响性能。
  2. 避免过大:如果 datafile_next 设置过大,可能会一次性占用过多磁盘空间,导致资源浪费。

4. 总结

  • 磁盘占用比例差异:可能是由于数据增长、自动扩容机制或其他文件占用导致的。
  • 调小 datafile_disk_percentage:无法直接释放已占用的磁盘空间,需通过清理数据或迁移数据等方式解决。
  • datafile_next 最佳实践:根据磁盘总空间和数据增长速度合理设置,推荐初始值为 10GB 或更大。

如果您仍有疑问或需要进一步的帮助,请提供更多详细信息,我们将尽力为您解答!

检索到的文档如下:

  1. 配置磁盘数据文件的动态扩容
  2. datafile_disk_percentage
  3. OceanBase 数据库性能的影响因素
  4. 节点数据盘空间满
  5. 内存相关参数
  6. BootStrap
1 个赞

集群为新建的吧?这边新建集群后 磁盘大小是按照datafile_size预分配的。并未一次性按照datafile_max分配完
节点占比大小不一致问题这边需要咨询一下

1 个赞

老师,请教一下,有什么办法能让oceanbase释放部分空闲的已分配空间吗?

1 个赞

磁盘参数当前不支持调小

老师,最后跟您确认一下,能否可以通过清理sstable中的转储数据来达到磁盘空间的释放吗?

1 个赞

不可以,ob是预保留磁盘大小的。
这边新建集群后 磁盘大小是按照datafile_size预分配的并未复现出你的场景,请问你做过什么操作么

1 个赞

主要做了两件事:

  1. 通过cloudcanal把生产环境mysql的200G数据同步到Oceanbase(全量+增量)
  2. 将七八个大表(上千万数据量级)做了按天分区。
1 个赞

:handshake: :handshake: :handshake: