服务器过载
概述
有时服务器可能因各种原因变得过载。为了确定当前的 CPU 过载情况,ClickHouse 服务器计算 CPU 等待时间(OSCPUWaitMicroseconds
指标)与忙碌时间(OSCPUVirtualTimeMicroseconds
指标)的比值。当服务器的过载超过某个比率时,舍弃一些查询或者甚至丢弃连接请求是有意义的,以免进一步增加负载。
有一个服务器设置 os_cpu_busy_time_threshold
控制考虑 CPU 从事某些有用工作的最小忙碌时间。如果当前的 OSCPUVirtualTimeMicroseconds
指标值低于此值,则假定 CPU 过载为 0。
拒绝查询
拒绝查询的行为由查询级别设置 min_os_cpu_wait_time_ratio_to_throw
和 max_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 = 2
,max_os_cpu_wait_time_ratio_to_throw = 6
,且 cpu_overload = 4
,那么查询将以 0.5
的概率被拒绝。
丢弃连接
丢弃连接由服务器级别设置 min_os_cpu_wait_time_ratio_to_drop_connection
和 max_os_cpu_wait_time_ratio_to_drop_connection
控制。这些设置可以在不重启服务器的情况下进行更改。这些设置背后的理念与拒绝查询的类似。唯一的区别在于,如果服务器过载,连接尝试将从服务器端被拒绝。
资源过载警告
当服务器过载时,ClickHouse 还会将 CPU 和内存过载警告记录到 system.warnings
表中。您可以通过服务器配置自定义这些阈值。
示例