oceanbase cpu利用率高如何处理

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

observer cpu利用率高如何分析

根据文档库中的信息,当遇到 OceanBase 数据库 CPU 利用率高的情况时,可以采取以下步骤进行分析和处理:

  1. 使用工具查看 CPU 使用情况

    • top 命令:通过 top 命令实时查看 ODP 的 CPU 使用情况。如果 CPU 使用超过 OceanBase 数据库,其性能可能不正常,需进一步分析。可以通过 top -H 查看线程的 CPU 消耗,ODP 的线程消耗应该很平均。(参考文档:[工具查看的主要方法])
  2. 使用 perf 命令进行深入分析

    • perf top:通过 perf top 查看热点函数,目前 ODP 无函数占用超过 5%。
    • perf stat:通过 perf stat 查看硬件指标,在分析不同 CPU 时会有帮助。(参考文档:[工具查看的主要方法])
  3. 检查日志生成速度

    • 日志对性能损耗很大,可以查看 ODP 日志生成速度。如果每 1~2s 就生成一份日志,对性能损害很大。(参考文档:[工具查看的主要方法])
  4. 监控和诊断租户性能

    • 使用 OCP 监控平台查看 CPU 消耗比、内存消耗比和数据量前 3 的 OceanBase 租户数据。OCP 可以展示每个租户的资源使用情况,帮助定位哪个租户或哪个 SQL 导致 CPU 使用率高。(参考文档:[OCP 监控平台展示])
  5. 分析 SQL 执行情况

    • 查询 GV$OB_SQL_AUDIT 视图抓取信息进行分析,定位到问题 SQL。例如,可以查看 SQL 的平均耗时和 CPU 使用量。如果发现某条 SQL 的 CPU 使用量过高,可以进一步分析该 SQL 的执行计划(Explain 信息)以及相关表和视图的 DDL 定义,确定影响性能的原因。(参考文档:[某客户数据库系统发生性能故障])
  6. 调整大查询参数

    • 通过配置参数 large_query_threshold 来定义执行时间超过一定阈值的查询操作为大查询。如果系统中同时运行着大查询和小查询,OceanBase 数据库会将一部分 CPU 资源分配给大查询,并通过配置参数 large_query_worker_percentage(默认值为 30%)来限制执行大查询最多可以使用的租户活跃工作线程数。确保 large_query_threshold 设置在一个合理的范围内,避免大查询抢占过多 CPU 资源。(参考文档:[配置参数 large_query_threshold])
  7. 优化 DDL 和 SQL

    • 如果发现某些 SQL 或 DDL 导致 CPU 使用率高,可以进行优化。例如,优化索引、减少不必要的表扫描、调整查询逻辑等。(参考文档:[某客户数据库系统发生性能故障])
  8. 检查资源池配置

    • 在创建租户时,确保指定了合适的资源池,资源池定义 CPU 规格可以限制租户级别的 CPU 使用,从而实现租户间 CPU 使用的隔离。在最新版本中,OceanBase 数据库内核实现了 cgroup 的隔离来对 CPU 进行有效地控制和限制,但这需要操作系统级别的配置搭配生效。(参考文档:[资源池配置])
  9. 使用 obdiag 收集诊断信息

    • 推荐使用 OceanBase 敏捷诊断工具 obdiag 收集诊断信息,以便更全面地分析问题。具体使用方法可以参考官方文档。(参考文档:[使用 obdiag 收集诊断信息])

希望以上步骤能帮助您有效分析和处理 OceanBase 数据库 CPU 利用率高的问题。如果问题仍然存在,建议联系 OceanBase 的技术支持团队获取进一步的帮助。

检索到的文档如下:

  1. ODP 性能分析
  2. 租户性能诊断
  3. 集群性能诊断
  4. 多租户线程常见问题
  5. 集群总览
  6. 产品 FAQ
  7. 监控告警
  8. SQL Explain 优化实践
  9. 租户请求队列积压

使用obdiag工具收集场景信息

CPU高

obdiag gather scene run --scene=observer.cpu_high