跳转到主要内容

概述

有时,服务器可能会因各种原因而过载。为了判断当前的 CPU 过载情况, ClickHouse server 会计算 CPU 等待时间 (OSCPUWaitMicroseconds 指标) 与忙碌时间 (OSCPUVirtualTimeMicroseconds 指标) 的比率。当服务器过载超过某个比率时, 丢弃部分查询,甚至拒绝连接请求,有助于避免负载进一步增加。 有一个服务器设置 os_cpu_busy_time_threshold,用于控制将 CPU 视为 正在执行有效工作时所需的最小忙碌时间。如果当前 OSCPUVirtualTimeMicroseconds 指标值低于该值, 则认为 CPU 过载为 0。

拒绝查询

查询拒绝行为由查询级设置 min_os_cpu_wait_time_ratio_to_throwmax_os_cpu_wait_time_ratio_to_throw 控制。如果设置了这些参数,且 min_os_cpu_wait_time_ratio_to_throw 小于 max_os_cpu_wait_time_ratio_to_throw,那么当过载比率至少达到 min_os_cpu_wait_time_ratio_to_throw 时,查询会以一定概率被拒绝,并抛出 SERVER_OVERLOADED 错误。该概率 由最小比率与最大比率之间的线性插值确定。例如,如果 min_os_cpu_wait_time_ratio_to_throw = 2max_os_cpu_wait_time_ratio_to_throw = 6,且 cpu_overload = 4,则该查询会以 0.5 的概率被拒绝。

丢弃连接

是否丢弃连接由服务器级别的设置 min_os_cpu_wait_time_ratio_to_drop_connectionmax_os_cpu_wait_time_ratio_to_drop_connection 控制。这些设置无需重启服务器即可更改。其背后的思路 与拒绝查询类似。唯一的区别是,在这种情况下,如果服务器过载, 连接尝试将被服务器端拒绝。

资源过载警告

当服务器过载时,ClickHouse 还会将 CPU 和内存过载警告记录到 system.warnings 表中。你可以 通过服务器配置自定义这些阈值。 示例

<resource_overload_warnings>
    <cpu_overload_warn_ratio>0.9</cpu_overload_warn_ratio>
    <cpu_overload_clear_ratio>0.8</cpu_overload_clear_ratio>
    <cpu_overload_duration_seconds>600</cpu_overload_duration_seconds>
    <memory_overload_warn_ratio>0.9</memory_overload_warn_ratio>
    <memory_overload_clear_ratio>0.8</memory_overload_clear_ratio>
    <memory_overload_duration_seconds>600</memory_overload_duration_seconds>
</resource_overload_warnings>
最后修改于 2026年6月10日