OceanBase 的内存是如何管理的?OOM 如何排查?

OceanBase 集群出现 OOM,如何定位内存占用来源?

3 个赞

先看报错日志,然后再看看LSMTree的工作机制各个故障点

学习一下

@论坛小助手

OceanBase 的内存管理机制如下:

  1. OceanBase 数据库启动时会加载几 GB 的内存,并且随着运行逐渐按需申请更多内存直到达到 memory_limit 设置的上限。
  2. 一旦 OceanBase Server 节点从操作系统申请了内存,通常不会释放回操作系统,而是会维护在自己的内存管理使用列表和 Free List 中。
  3. OceanBase 数据库会占据服务器的大部分内存并进行统一管理。对于新的业务需求,通过创建新租户来划分内存资源。
  4. 当租户内部内存不足以满足需求时,可以在线扩展集群,增加可分配的 CPU 和内存资源。
  5. 如果遇到 OOM 问题,可以通过以下方式进行排查:
    • 使用 obdiag check 命令对 OceanBase 集群进行巡检,帮助发现可能导致集群 OOM 的异常原因。
    • 通过视图如 GV$OB_MEMORY 来查看 OBServer 节点内存标签的统计信息。
    • 通过视图如 GV$OB_MEMSTORE 来查看 MemStore 的统计信息。
    • 通过视图如 GV$OB_KVCACHE 来查看 Kvcache 的统计信息。
  6. 如果需要进一步查看内存使用情况,还可以查看内存相关的日志。

具体信息可参考以下文档:

  1. 产品 FAQ
  2. 内存管理概述
  3. 内存相关日志
  4. 内存相关的视图
  5. 通过 obdiag 工具进行诊断和分析
2 个赞

喵的

你来回答一下

学到了

先收藏先

学习一下