首批通过分布式安全可靠测评,为关键业务系统打造
为什么 observer 进程内存使用率高
更新时间:2026-05-09 01:51
本文介绍 OceanBase 数据库虚拟内存缓存的机制、查看方式以及设置方法和建议。
OceanBase 数据库会向操作系统申请并缓存 memory_limit 或 物理内存 * memory_limit_percentage 大小的内存,默认为 物理内存 * 50%。因此在运行 OceanBase 数据库时,操作系统的内存使用率会持续保持高水位。
这样可以避免频繁的通过操作系统接口申请和释放内存,频繁的申请和释放内存会出现性能瓶颈。 一旦 observer 缓存了物理内存,那么内部各个模块在使用内存时,可以直接通过 observer 的内存管理机制进行申请和释放。
如果需要查看租户的内存使用,可以通过日志中grep 的方式,其中tenant_id为租户的 ID。
[admin@hostname log]$ grep -A20 "tenant: <tenant_id>" observer.log
通过系统配置项 memory_chunk_cache_size 可以控制 observer 进程缓存的虚拟内存大小。默认为 0,表示尽可能生成缓存,直到达到 物理内存 * memory_limit_percentage 或者 memory_limit。如果memory_chunk_cache_size 不为 0,表示指定缓存多少虚拟内存。
例如,物理内存为 500 GB,memory_limit_percentage 设置为 90。
对于
memory_chunk_cache_size为 0 的情况,observer 进程虚拟内存缓存的大小为 500GB*90=450GB。对于
memory_chunk_cache_size不为 0 的情况,例如配置memory_chunk_cache_size='204800',此时 observer 进程虚拟内存缓存的大小为 204800 MB,也就是 200 GB。说明
memory_chunk_cache_size默认单位为 MB。 也可以指定 200 GB 为memory_chunk_cache_size='200G'。