OB 单机部署时 cpu_quota_concurrency 怎么设比较合理?

单机 16C 的机器,跑一个租户,cpu_quota_concurrency 默认是 4。

业务是典型 OLTP,线程大多在等 IO。我的理解是这个参数控制每个 CPU 配额上的并行线程数,设大能提升利用率但会增加 CPU 争抢。想请教:

  • 生产上一般维持默认还是调高?
  • 和 workers_per_cpu_quota 的关系是什么?
  • 怎么判断调过头了(看哪些指标)?

先谢过。

@论坛小助手

1 个赞

针对您的问题,我将分点详细解答:

1. 生产上 cpu_quota_concurrency 的一般设置

  • 默认值适用性:对于大多数典型 OLTP 应用,默认值 4 是一个相对保守且稳妥的选择。该值确保了在处理大量短事务时能够保持较好的响应时间与吞吐量平衡。从 cpu_quota_concurrency → 属性说明 中得知,调整此参数存在风险,因此建议除非有特殊性能需求或已经进行了充分测试验证,否则不轻易更改。
  • 是否需要调整:如果观察到系统 CPU 利用率较低而 I/O 等待时间较长,则可以考虑适当增加 cpu_quota_concurrency 以提高并发度,进而提升整体资源利用率。但同时要注意监控 CPU 使用情况,防止过度配置导致的潜在问题。

2. 与 workers_per_cpu_quota 的关系

  • 功能区别:
    • cpu_quota_concurrency 定义了租户每个 CPU 配额允许的最大活跃线程数(即实际运行中的线程数)。
    • workers_per_cpu_quota 则规定了每核 CPU 上可创建的工作线程最大数量。两者共同限制了一个租户内最多能有多少个线程处于就绪状态等待执行。
  • 配合使用原则:根据文档描述,必须保证 workers_per_cpu_quota > cpu_quota_concurrency。这意味着即使你增加了 cpu_quota_concurrency 来支持更多并发操作,也需相应地调高 workers_per_cpu_quota,以便有足够的备用工作线程池来应对突发请求负载。
  • 参考文档:workers_per_cpu_quota

3. 如何判断是否设置过高

  • 关键指标监视:
    • CPU 使用率:持续接近甚至超过 90% 表示可能存在 CPU 资源紧张的问题,此时可能需要降低 cpu_quota_concurrency。
    • 上下文切换次数:频繁的上下文切换可能是由于过多进程竞争 CPU 时间片引起,通过减少并发度可以缓解。
    • 内存消耗:虽然 cpu_quota_concurrency 主要影响 CPU 行为,但较高的值仍可能导致额外的内存占用上升,尤其是当数据库内部缓存被过度填充时。
    • 延迟与吞吐量变化:密切关注应用程序端及数据库层面的各项性能指标如平均查询响应时间和事务处理速率等,任何显著下降都提示着可能需要重新评估当前配置。

综上所述,在您当前场景下(单机 16 核心),维持 cpu_quota_concurrency 在默认 4 或略高于此水平通常是合理的。然而具体数值还需结合业务特点、硬件条件等因素综合考量,并辅以定期性能测试和监控数据分析来进行微调优化。希望这些建议对您有所帮助!

详情请参考:

  1. workers_per_cpu_quota
  2. cpu_quota_concurrency
  3. 工作线程
  4. OceanBase 数据库多租户线程
  5. 配置项总览
  6. system_cpu_quota
  7. election_cpu_quota
1 个赞