メインコンテンツへスキップ
メモリオーバーコミットは、クエリに対してより柔軟なメモリ制限を設定できるようにすることを目的とした実験的な手法です。 この手法の考え方は、クエリが使用できる保証済みのメモリ量を表す設定を導入することです。 メモリオーバーコミットが有効な状態でメモリ制限に達すると、ClickHouse は最もオーバーコミットしているクエリを選択し、そのクエリを終了させることでメモリの解放を試みます。 メモリ制限に達すると、どのクエリも新たなメモリを割り当てようとする際に一定時間待機します。 タイムアウトまでにメモリが解放されれば、クエリは実行を継続します。 そうでない場合は例外がスローされ、クエリは終了します。 停止または終了するクエリの選択は、どのメモリ制限に達したかに応じて、グローバルオーバーコミットトラッカーまたはユーザーオーバーコミットトラッカーによって行われます。 オーバーコミットトラッカーが停止するクエリを選択できない場合は、MEMORY_LIMIT_EXCEEDED 例外がスローされます。

ユーザー オーバーコミットトラッカー

ユーザー オーバーコミットトラッカー は、ユーザーのクエリリストの中から overcommit ratio が最も大きいクエリを見つけます。 クエリの overcommit ratio は、割り当て済みのバイト数を memory_overcommit_ratio_denominator_for_user 設定の値で割って計算されます。 クエリの memory_overcommit_ratio_denominator_for_user が 0 の場合、オーバーコミットトラッカー はそのクエリを選択しません。 待機タイムアウトは、memory_usage_overcommit_max_wait_microseconds 設定で指定します。
SELECT number FROM numbers(1000) GROUP BY number SETTINGS memory_overcommit_ratio_denominator_for_user=4000, memory_usage_overcommit_max_wait_microseconds=500

グローバル オーバーコミットトラッカー

グローバル オーバーコミットトラッカーは、すべてのクエリの一覧から、overcommit ratio が最も大きいクエリを見つけます。 この場合、overcommit ratio は、割り当てられたバイト数を memory_overcommit_ratio_denominator 設定の値で割って計算されます。 クエリの memory_overcommit_ratio_denominator が 0 の場合、オーバーコミットトラッカーはそのクエリを選択しません。 待機タイムアウトは、設定ファイル内の memory_usage_overcommit_max_wait_microseconds パラメータで設定されます。
最終更新日 2026年6月10日