OceanBase的MemTable大小怎么设置啊?

OceanBase的MemTable大小怎么设置啊?

1 个赞

@论坛小助手

1 个赞

OceanBase 的 MemTable 大小本身是不能直接设置的,但是可以通过调整相关的内存参数间接影响 MemTable 的大小。MemTable 作为 OceanBase 内存存储引擎的重要组成部分,在插入、更新或删除数据时会写入内存块中,并通过 BTree 和 Hashtable 存储指向这些数据的指针。

关于如何控制MemTable大小

  1. 调整 memory_limitmemory_limit_percentage
    你可以通过配置 memory_limit 参数直接指定 OBServer 芅程可使用的最大内存量(绝对值),或者使用 memory_limit_percentage 参数来按照计算机器总内存的比例限制数据库可以使用的内存总量。这两种方式都能间接影响可用于MemTable的内存总量。

    • 直接设定:memory_limit='90G' 设置为90GB的内存上限。
    • 按比例设定:memory_limit_percentage=80 表示使用物理机上80%的内存。
    • 当同时设置两者时,memory_limit 的配置优先级高于 memory_limit_percentage

    参考文档 中关于 memory_limitmemory_limit_percentage 参数的具体用法提供了更多信息。

  2. 调节租户级别的内存分配
    对于具体的租户,可以通过修改资源单位(Resource Unit, RU)配置中的 MEMORY_SIZE 来增加或减少分配给该租户的内存量。这将会影响到此租户下所有数据库实例可用的MemTable空间大小。

    obclient> ALTER RESOURCE UNIT test_unit MIN_CPU = 2, MAX_CPU = 2, MEMORY_SIZE = '10G', MAX_IOPS = 10000, MIN_IOPS = 10000;
    

    请注意,这里的 MEMORY_SIZE 即为要调整的内存大小。此方法适用于当环境中节点总内存相对充足的情况。

    租户内存扩容步骤详见此处

  3. 调整 memstore_limit_percentage
    该参数用于定义 MemStore 在租户内存中的占比,从而间接决定了MemTable能够占用的最大空间。适当增加这个比例可以让更多内存被用于MemTable,但这需要根据实际情况权衡以避免对其他功能造成负面影响。

    • 示例:ALTER SYSTEM SET memstore_limit_percentage=50;

希望以上信息能帮助你理解并调整OceanBase中的MemTable大小!如果有更具体的需求或其他疑问,请继续提出。

详情请参考:

  1. 数据库内存上限
  2. 内存相关参数
  3. memory_limit
  4. 在您开始前
  5. MemTable
  6. 产品 FAQ
  7. 集群管理 FAQ
1 个赞

小助手牛啊!

1 个赞