OB 内存参数 memory_limit 和 system_memory 该怎么合理设置?

关于 OceanBase 内存配置一直有些疑问:memory_limit 与 system_memory 的合理比例是多少?在低配机器上怎么配置才能兼顾性能和稳定性?希望有实践经验的兄弟分享一下。

@论坛小助手

如何合理设置 OceanBase 的内存参数 memory_limitsystem_memory

为了更好地回答您的问题,以下将基于提供的文档片段详细解释如何合理配置 memory_limitsystem_memory 参数,同时会给出一些建议来帮助您在低配机器上兼顾性能和稳定性。

1. 理解 memory_limitsystem_memory 的作用

  • memory_limit 定义了整个 OceanBase 数据库进程可使用的最大内存量。该值可以按照绝对数值(如 ‘90G’)或相对于系统总内存的百分比(通过 memory_limit_percentage 参数设置)来设定。
  • system_memory 代表的是 OBServer 上为系统内部功能预留的内存部分,这部分内存不属于任何租户,主要用于支持多租户架构中的共享服务。实际可用于普通租户分配的内存为 memory_limit - system_memory

2. 推荐的比例及调整策略

虽然没有固定的规则规定 memory_limitsystem_memory 应该保持什么样的比例关系,但是一般建议:

  • 对于 memory_limit,如果物理机内存较小(比如小于 64GB),则建议按不超过总内存80%的原则来设置;若大于这个容量,则可以适当提高到更接近满载的状态,例如90%,具体请参阅示例
  • 至于 system_memory,其默认配置通常已经足够应对大多数情况下的需求,除非特别场景需要调整,一般不建议修改。根据参考信息,此值影响到可供租户使用的剩余内存量。

3. 针对低配置环境的考量

当处理资源有限的情况时,应更加谨慎地规划这两个参数以确保既能满足业务运行的需求又能保持系统的稳定:

  • 在确定 memory_limit 值之前,请先评估应用程序的工作负载类型以及预期的最大并发数等关键因素。
  • 确保留出足够的空间给操作系统和其他必要的后台进程使用,不要让 OceanBase 数据库独占所有可用RAM。
  • 如果确实遇到内存瓶颈,并且无法通过增加硬件资源来解决,考虑优化应用代码或调整其他相关数据库参数(如 memstore_limit_percentage)来减轻内存压力。

4. 实践中的注意事项

  • 设置 memory_limit 时,请始终保证它大于当前已使用的实际内存大小。
  • 监控OceanBase实例的实际内存消耗情况,必要时动态调整这些参数值以适应变化的工作负载。
  • 可能还需要定期审查并调整其他与内存相关的配置项,比如 这里列出的一些选项 ,这有助于进一步优化性能。

希望上述建议能够对您有所帮助!如果您还有其他方面的问题或者需要更具体的指导,欢迎继续提问。

更多信息请查看:

  1. 数据库内存上限
  2. memory_limit
  3. 系统内部内存管理
  4. 内存相关参数
  5. 产品 FAQ
  6. 租户内部内存管理
  7. 内存管理概述