暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库学习Q&A 016:OceanBase 数据库内存有哪些常见问题,可能导致的原因是什么?

OceanBase 数据库内存有如下常见问题:

  • 工作区(work area)报内存不足

    工作区内存 limit = 租户内存 * ob_sql_work_area_percentage(默认5%),如果请求并发量较大,且每个请求占用的工作区内存比较多,可能出现工作区内存不足的报错。经常出现的场景有 union、sort、group by 等。 可以通过适当调大工作区系统变量来规避比如 set global ob_sql_work_area_percentage = 10

  • 租户内存不足

    客户端报错 "Over tenant memory limits",错误码 4013,租户内存不足。通常需要进一步分析当前内存消耗的情况。 可以通过 GV$OB_MEMORY 视图,也可通过 observer.log 中的日志查看是哪个 mod 消耗的内存绝对占比比较大。

  • MemStore 内存用尽

    写入的速度大于转储的速度,导致 MemStore 耗尽。比如大量高并发的数据导入,MemStore 的写操作过快,系统未能及时转储,MemStore 就被用完,返回用户报错 4030。 可以通过分析转储速度缓慢瓶颈、尝试提高转储速度,或者是减缓写入速度来减缓、解决这类问题。

  • OBServer 节点整体内存使用超限

    OBServer 节点进程在启动过程中,会根据配置的参数来计算当前进程最大使用的物理内存上限。 如果 memory_limit 配置数值,那么 OBServer 节点的内存会直接取 memory_limit。如果 memory_limit 为 0,则会通过 物理内存 * memory_limit_percentage 来计算得到内存使用上限。 若观察到 OBServer 节点内存使用超限,可以查询 _all_virtual_server_stat 可以看到实际的 OBServer 节点内的 limit, 然后再次检查 memory_limitmemory_limit_percentage 这两个参数是否配置正确。 如果还存在内存超限且整体趋势持续增长的情况,那么有可能是遇到了内存泄露的场景,需要联系 OceanBase 数据库技术支持工程师来进行排查解决。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论