转储延时&&内存超限

看教材有几个疑问:

  1. 每个memtable 多个 ?转储是个memtable整体写完才释放内存吗?
  2. 当触发freeze_trigger_percentage阈值并开始转储,同时生成新memtable时,实际使用内存是否已超过 freeze_trgger_percentage 限值?
  3. 如转储IO慢,第二个memtable 又达到freeze_triger_percentage,哪是生成第三个memtable还是暂停业务?
  4. 如果freeze_trigger_percentage设置较大,比如99%,在高负载情况下,会发生什么情况?内存受限业务停止?
1 个赞

@论坛小助手

1 个赞

根据文档提供的信息,我们可以解答您的疑问如下:

  1. 每个MemTable多个?转储是个MemTable整体写完才释放内存吗?

    • 每个分区或租户级别的MemTable是独立的。当MemTable大小超过一定的阈值时,会触发转储操作。转储是指将当前活跃的MemTable(Active MemTable)中的数据写入到SSTable中,并生成一个新的Active MemTable。旧的MemTable会被冻结(Frozen MemTable),并且在转储成功后释放其占用的内存。
  2. 当触发freeze_trigger_percentage阈值并开始转储,同时生成新memtable时,实际使用内存是否已超过 freeze_trgger_percentage 限值?

    • 是的,当达到 freeze_trigger_percentage 阈值时,会触发转储操作并生成新的Active MemTable。此时,实际使用的内存会超过 freeze_trigger_percentage 限值,因为旧的Frozen MemTable还在占用内存,而新的Active MemTable也在使用内存。
  3. 如转储IO慢,第二个memtable 又达到freeze_triger_percentage,哪是生成第三个memtable还是暂停业务?

    • 如果转储IO较慢,而新的Active MemTable又达到了 freeze_trigger_percentage 阈值,会生成第三个Active MemTable。OceanBase会继续处理新的写入请求,直到所有的MemTable都被转储成功并释放内存。
  4. 如果freeze_trigger_percentage设置较大,比如99%,在高负载情况下,会发生什么情况?内存受限业务停止?

    • 如果将 freeze_trigger_percentage 设置为较大的值(如99%),在高负载情况下,可能会导致内存不足。当内存使用接近上限时,系统可能会因为内存不足而暂停部分业务操作,甚至导致业务停止。因此,建议根据实际情况合理设置 freeze_trigger_percentage,以确保系统在高负载情况下仍然能够稳定运行。

详情请参考:

  1. 转储和合并
  2. 合并
  3. 清理 WR 数据
1 个赞

每个MemTable多大?

学习了