ClickHouse/docs/ja/operations/settings/memory-overcommit.md
2024-11-18 11:58:58 +09:00

2.8 KiB

slug
/ja/operations/settings/memory-overcommit

メモリーオーバーコミット

メモリーオーバーコミットは、クエリのより柔軟なメモリー制限を設定するためのエクスペリメンタルな技術です。

この技術のアイデアは、クエリが使用できるメモリーの保証された量を表す設定を導入することです。メモリーオーバーコミットが有効になり、メモリー制限に達した場合、ClickHouseは最もオーバーコミットされたクエリを選択し、このクエリを終了させてメモリーを解放しようとします。

メモリー制限に達した場合、クエリは新しいメモリーを割り当てようとする際に一定時間待機します。タイムアウトが発生し、メモリーが解放されれば、クエリは実行を続行します。それ以外の場合、例外がスローされ、クエリが終了されます。

クエリを停止または終了する選択は、グローバルまたはユーザーのオーバーコミットトラッカーによって行われ、どのメモリー制限に到達したかに依存します。オーバーコミットトラッカーが停止すべきクエリを選べない場合、MEMORY_LIMIT_EXCEEDEDの例外がスローされます。

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

ユーザーオーバーコミットトラッカーは、ユーザーのクエリリスト内で最もオーバーコミット率の高いクエリを見つけます。クエリのオーバーコミット率は、割り当てられたバイト数をmemory_overcommit_ratio_denominator設定値で割ったものとして計算されます。

クエリのmemory_overcommit_ratio_denominatorがゼロの場合、オーバーコミットトラッカーはこのクエリを選択しません。

待機タイムアウトはmemory_usage_overcommit_max_wait_microseconds設定で設定されます。

SELECT number FROM numbers(1000) GROUP BY number SETTINGS memory_overcommit_ratio_denominator=4000, memory_usage_overcommit_max_wait_microseconds=500

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

グローバルオーバーコミットトラッカーは、すべてのクエリのリスト内で最もオーバーコミット率の高いクエリを見つけます。この場合、オーバーコミット率は割り当てられたバイト数をmemory_overcommit_ratio_denominator_for_user設定値で割ったものとして計算されます。

クエリのmemory_overcommit_ratio_denominator_for_userがゼロの場合、オーバーコミットトラッカーはこのクエリを選択しません。

待機タイムアウトは、設定ファイル内のmemory_usage_overcommit_max_wait_microsecondsパラメータで設定されます。