礼貌咨询问题,给各位大佬的辛苦费
OceanBase 数据库中租户的最大可用线程数由两个关键因素共同决定:租户的 max_cpu(或 unit_max_cpu) 和 系统级配置项 workers_per_cpu_quota。
workers_per_cpu_quota 该值表示一个租户在运行过程中最多可以持有的工作线程总数(包括活跃线程和因大查询挂起等场景下动态创建的线程)。具体的计算公式如下:最大线程数 = max_cpu × workers_per_cpu_quota
同时还有另外一个参数 cpu_quota_concurrency 控制活跃线程数,表示每个 CPU 配额允许的最大并发活跃线程数,默认值通常为 2,活跃线程数上限 = max_cpu × cpu_quota_concurrency
租户的最大可用线程数计算方法
租户的最大可用线程数在 OceanBase 数据库中是通过一系列配置项和参数来计算的。以下是详细的计算方法和相关参数:
最大线程数:
计算公式:
[
\text{最大线程数} = \text{unit_max_cpu} \times \text{workers_per_cpu_quota}
]
参数说明:
unit_max_cpu:租户资源规格的最大 CPU 核数。
workers_per_cpu_quota:每个 CPU 可以扩展出的 worker 线程数,默认值为 10,取值范围为 [2, 20]。
活跃线程数:
计算公式:
[
\text{活跃线程数} = \text{unit_min_cpu} \times \text{cpu_quota_concurrency}
]
参数说明:
unit_min_cpu:租户资源规格的最小 CPU 核数。
cpu_quota_concurrency:每个 CPU 所允许的最大并发数,默认值为 4,取值范围为 [1, 10]。
大查询线程数:
计算公式:
[
\text{大查询线程数} = \text{活跃线程数} \times \text{large_query_worker_percentage}
]
参数说明:
large_query_worker_percentage:大查询可以使用的工作线程数量,默认为 30%。
示例
假设一个租户配置如下:
unit_min_cpu = 2
unit_max_cpu = 8
cpu_quota_concurrency = 4
workers_per_cpu_quota = 10
large_query_worker_percentage = 30%
则:
最大线程数:
[
\text{最大线程数} = 8 \times 10 = 80
]
活跃线程数:
[
\text{活跃线程数} = 2 \times 4 = 8
]
大查询线程数:
[
\text{大查询线程数} = 8 \times 0.30 = 2.4 \approx 2
]
注意事项
配置项的合理设置:
workers_per_cpu_quota 和 cpu_quota_concurrency 的关系:为了确保每个线程都能分配到 CPU,workers_per_cpu_quota 应大于 cpu_quota_concurrency。
避免线程数过多或过少:设置 cpu_quota_concurrency 太大可能导致部分线程分配不到 CPU,设置太小可能导致响应时间高、内部任务处理不及时和 CPU 利用不充分。
资源超卖:
实际 CPU 分配:在资源超卖的情况下,实际分配给租户的 CPU 可能介于 unit_min_cpu 和 unit_max_cpu 之间。例如,租户 T1 配置了 unit_min_cpu = 2 和 unit_max_cpu = 8,但在资源超卖的情况下实际分配的 CPU 为 5,则:
[
\text{token_count} = 5 \times \text{cpu_quota_concurrency}
]
监控和日志:可以通过 observer.log 中的 dump tenant info 日志片段来查看当前租户的线程数量和最大线程数。
结论
租户的最大可用线程数通过 unit_max_cpu 和 workers_per_cpu_quota 计算得出,活跃线程数通过 unit_min_cpu 和 cpu_quota_concurrency 计算得出,大查询线程数则基于活跃线程数和 large_query_worker_percentage 计算。合理设置这些参数可以确保系统的稳定性和高效运行