> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> クエリに対して、より柔軟なメモリ制限を設定できるようにすることを目的とした実験的な手法です。

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

メモリオーバーコミットは、クエリに対してより柔軟なメモリ制限を設定できるようにすることを目的とした実験的な手法です。

この手法の考え方は、クエリが使用できる保証済みのメモリ量を表す設定を導入することです。
メモリオーバーコミットが有効な状態でメモリ制限に達すると、ClickHouse は最もオーバーコミットしているクエリを選択し、そのクエリを終了させることでメモリの解放を試みます。

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

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

<div id="user-overcommit-tracker">
  ## ユーザー オーバーコミットトラッカー
</div>

ユーザー オーバーコミットトラッカー は、ユーザーのクエリリストの中から overcommit ratio が最も大きいクエリを見つけます。
クエリの overcommit ratio は、割り当て済みのバイト数を `memory_overcommit_ratio_denominator_for_user` 設定の値で割って計算されます。

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

待機タイムアウトは、`memory_usage_overcommit_max_wait_microseconds` 設定で指定します。

**例**

```sql theme={null}
SELECT number FROM numbers(1000) GROUP BY number SETTINGS memory_overcommit_ratio_denominator_for_user=4000, memory_usage_overcommit_max_wait_microseconds=500
```

<div id="global-overcommit-tracker">
  ## グローバル オーバーコミットトラッカー
</div>

グローバル オーバーコミットトラッカーは、すべてのクエリの一覧から、overcommit ratio が最も大きいクエリを見つけます。
この場合、overcommit ratio は、割り当てられたバイト数を `memory_overcommit_ratio_denominator` 設定の値で割って計算されます。

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

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