租户的最大可用线程数是怎么计算的呢

礼貌咨询问题,给各位大佬的辛苦费

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

2 个赞

租户的最大可用线程数计算方法

租户的最大可用线程数在 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 计算。合理设置这些参数可以确保系统的稳定性和高效运行

1 个赞