サーバーの過負荷
概要
サーバーはさまざまな理由で過負荷になることがあります。現在の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はまた、サーバーが過負荷のときに system.warnings テーブルにCPUおよびメモリの過負荷警告をログに記録します。これらの閾値はサーバーの設定を通じてカスタマイズできます。
例