概要
サーバーは、さまざまな理由で過負荷になることがあります。現在の CPU 過負荷を判定するために、
ClickHouse server は CPU の待機時間 (OSCPUWaitMicroseconds メトリック) とビジー時間
(OSCPUVirtualTimeMicroseconds メトリック) の比率を計算します。サーバーが一定の比率を超えて過負荷になっている場合は、
負荷のさらなる増加を防ぐために、一部のクエリを破棄したり、場合によっては接続リクエストを拒否したりするのが適切です。
CPU が何らかの有用な処理を行っていると見なすための最小ビジー時間を制御する server setting
os_cpu_busy_time_threshold があります。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 テーブルに記録します。これらのしきい値は、サーバー設定でカスタマイズできます。
例
<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>