> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Настройки, ограничивающие сложность запросов.

# Ограничения на сложность запросов

<div id="overview">
  ## Обзор
</div>

В разделе [настроек](/docs/ru/concepts/features/configuration/settings/overview) ClickHouse предусмотрена
возможность устанавливать ограничения на сложность запросов. Это помогает защититься от
потенциально ресурсоёмких запросов, обеспечивая более безопасное и предсказуемое
выполнение, особенно при использовании пользовательского интерфейса.

Почти все ограничения применяются только к запросам `SELECT`, а при распределённой
обработке запросов они применяются отдельно на каждом сервере.

Как правило, ClickHouse проверяет ограничения только после полной обработки
частей данных, а не для каждой строки. Это может
привести к ситуации, когда ограничения нарушаются в процессе обработки
части.

<div id="overflow_mode_setting">
  ## Настройки `overflow_mode`
</div>

Большинство ограничений также имеют параметр `overflow_mode`, который определяет, что происходит
при превышении лимита, и может принимать одно из двух значений:

* `throw`: сгенерировать исключение (по умолчанию).
* `break`: остановить выполнение запроса и вернуть частичный результат, как если бы
  исходные данные были исчерпаны.

Когда запрос останавливается параметром `max_execution_time` со значением `break`, некоторые операции не могут безопасно вернуть
частичный результат, поэтому вместо сокращённого результата они завершаются, не возвращая его. Функция,
вычисляющая одно значение, завершается, не возвращая это значение; будет ли остановка также передана
клиенту как ошибка `TIMEOUT_EXCEEDED` или проявится лишь отсутствием результата, зависит от того, где был
прерван запрос. Незавершённая из-за тайм-аута мутация таблицы `Memory` оставляет таблицу без изменений и
сообщает `TIMEOUT_EXCEEDED`. Операция `INSERT` может сообщить `QUERY_WAS_CANCELLED`. Некоторые операции, ожидающие
других реплик или завершения фоновой работы, вообще не останавливаются по `max_execution_time`: запись с кворумом
продолжает ожидание до достижения кворума либо сообщает `UNKNOWN_STATUS_OF_INSERT`, если раньше
истекает `insert_quorum_timeout`.

<div id="group_by_overflow_mode_settings">
  ## Настройки `group_by_overflow_mode`
</div>

У настройки `group_by_overflow_mode` также есть
значение `any`:

* `any` : продолжать агрегацию для ключей, уже попавших в набор, но не
  добавлять в него новые ключи.

<div id="relevant-settings">
  ## Список настроек
</div>

Следующие настройки используются для задания ограничений на сложность запросов.

<Note>
  Ограничения на «максимальное количество чего-либо» могут иметь значение `0`,
  что означает отсутствие ограничений.
</Note>

| Параметр                                                                                                                                       | Краткое описание                                                                                                                                                                                       |
| ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [`max_memory_usage`](/docs/ru/reference/settings/session-settings/max-memory-usage#max_memory_usage)                                                | Максимальный объём оперативной памяти, используемый для выполнения запроса на одном сервере.                                                                                                           |
| [`max_memory_usage_for_user`](/docs/ru/reference/settings/session-settings/max-memory-usage#max_memory_usage_for_user)                              | Максимальный объём оперативной памяти, используемый для выполнения запросов пользователя на одном сервере.                                                                                             |
| [`max_rows_to_read`](/docs/ru/reference/settings/session-settings/max-rows#max_rows_to_read)                                                        | Максимальное количество строк, которое можно прочитать из таблицы при выполнении запроса.                                                                                                              |
| [`max_bytes_to_read`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_to_read)                                                     | Максимальное количество байтов (несжатых данных), которое можно прочитать из таблицы при выполнении запроса.                                                                                           |
| [`read_overflow_mode_leaf`](/docs/ru/reference/settings/session-settings/read-overflow-mode#read_overflow_mode_leaf)                                | Задаёт, что происходит, когда объём прочитанных данных превышает одно из ограничений листового узла                                                                                                    |
| [`max_rows_to_read_leaf`](/docs/ru/reference/settings/session-settings/max-rows#max_rows_to_read_leaf)                                              | Максимальное количество строк, которое можно прочитать из локальной таблицы на листовом узле при выполнении распределённого запроса                                                                    |
| [`max_bytes_to_read_leaf`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_to_read_leaf)                                           | Максимальное количество байтов (несжатых данных), которое можно прочитать из локальной таблицы на листовом узле при выполнении распределённого запроса.                                                |
| [`read_overflow_mode_leaf`](/docs/ru/reference/settings/session-settings/read-overflow-mode#read_overflow_mode_leaf)                                | Задаёт, что происходит, когда объём прочитанных данных превышает одно из ограничений листового узла.                                                                                                   |
| [`max_rows_to_group_by`](/docs/ru/reference/settings/session-settings/max-rows#max_rows_to_group_by)                                                | Максимальное количество уникальных ключей, полученных в результате агрегации.                                                                                                                          |
| [`group_by_overflow_mode`](/docs/ru/reference/settings/session-settings/group-by#group_by_overflow_mode)                                            | Задаёт, что происходит, когда количество уникальных ключей для агрегации превышает ограничение                                                                                                         |
| [`max_bytes_before_external_group_by`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_before_external_group_by)                   | Включает или отключает выполнение `GROUP BY` во внешней памяти.                                                                                                                                        |
| [`max_bytes_ratio_before_external_group_by`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_ratio_before_external_group_by)       | Доля доступной памяти, которую можно использовать для `GROUP BY`. После достижения этого значения для агрегации используется внешняя память.                                                           |
| [`max_bytes_before_external_sort`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_before_external_sort)                           | Включает или отключает выполнение `ORDER BY` во внешней памяти.                                                                                                                                        |
| [`max_bytes_ratio_before_external_sort`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_ratio_before_external_sort)               | Доля доступной памяти, которую можно использовать для `ORDER BY`. После достижения этого значения используется внешняя сортировка.                                                                     |
| [`max_rows_to_sort`](/docs/ru/reference/settings/session-settings/max-rows#max_rows_to_sort)                                                        | Максимальное количество строк перед сортировкой. Позволяет ограничить потребление памяти при сортировке.                                                                                               |
| [`max_bytes_to_sort`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_to_sort)                                                     | Максимальное количество байтов перед сортировкой.                                                                                                                                                      |
| [`sort_overflow_mode`](/docs/ru/reference/settings/session-settings/other#sort_overflow_mode)                                                       | Задаёт, что происходит, если количество строк перед сортировкой превышает одно из ограничений.                                                                                                         |
| [`max_result_rows`](/docs/ru/reference/settings/session-settings/max-result#max_result_rows)                                                        | Ограничивает количество строк в результате.                                                                                                                                                            |
| [`max_result_bytes`](/docs/ru/reference/settings/session-settings/max-result#max_result_bytes)                                                      | Ограничивает размер результата в байтах (в несжатом виде)                                                                                                                                              |
| [`result_overflow_mode`](/docs/ru/reference/settings/session-settings/other#result_overflow_mode)                                                   | Задаёт, что делать, если объём результата превышает одно из ограничений.                                                                                                                               |
| [`max_execution_time`](/docs/ru/reference/settings/session-settings/max-execution#max_execution_time)                                               | Максимальное время выполнения запроса в секундах.                                                                                                                                                      |
| [`timeout_overflow_mode`](/docs/ru/reference/settings/session-settings/timeout-overflow-mode#timeout_overflow_mode)                                 | Задаёт, что делать, если запрос выполняется дольше `max_execution_time` или если расчётное время выполнения превышает `max_estimated_execution_time` (расчётное время проверяется только при `throw`). |
| [`max_execution_time_leaf`](/docs/ru/reference/settings/session-settings/max-execution#max_execution_time_leaf)                                     | По смыслу аналогичен `max_execution_time`, но применяется только к листовым узлам для распределённых или удалённых запросов.                                                                           |
| [`timeout_overflow_mode_leaf`](/docs/ru/reference/settings/session-settings/timeout-overflow-mode#timeout_overflow_mode_leaf)                       | Задаёт, что происходит, если запрос на листовом узле выполняется дольше `max_execution_time_leaf`.                                                                                                     |
| [`min_execution_speed`](/docs/ru/reference/settings/session-settings/min-execution-speed#min_execution_speed)                                       | Минимальная скорость выполнения в строках в секунду.                                                                                                                                                   |
| [`min_execution_speed_bytes`](/docs/ru/reference/settings/session-settings/min-execution-speed#min_execution_speed_bytes)                           | Минимальное количество обрабатываемых байтов в секунду.                                                                                                                                                |
| [`max_execution_speed`](/docs/ru/reference/settings/session-settings/max-execution#max_execution_speed)                                             | Максимальное количество обрабатываемых строк в секунду.                                                                                                                                                |
| [`max_execution_speed_bytes`](/docs/ru/reference/settings/session-settings/max-execution#max_execution_speed_bytes)                                 | Максимальное количество обрабатываемых байтов в секунду.                                                                                                                                               |
| [`timeout_before_checking_execution_speed`](/docs/ru/reference/settings/session-settings/other#timeout_before_checking_execution_speed)             | Проверяет, не слишком ли низка скорость выполнения (не меньше `min_execution_speed`) после истечения указанного времени в секундах.                                                                    |
| [`max_estimated_execution_time`](/docs/ru/reference/settings/session-settings/max#max_estimated_execution_time)                                     | Максимальное расчётное время выполнения запроса в секундах.                                                                                                                                            |
| [`max_columns_to_read`](/docs/ru/reference/settings/session-settings/max#max_columns_to_read)                                                       | Максимальное количество столбцов, которое можно прочитать из таблицы в одном запросе.                                                                                                                  |
| [`max_temporary_columns`](/docs/ru/reference/settings/session-settings/max-temporary#max_temporary_columns)                                         | Максимальное количество временных столбцов, которые должны одновременно находиться в оперативной памяти при выполнении запроса, включая константные столбцы.                                           |
| [`max_temporary_non_const_columns`](/docs/ru/reference/settings/session-settings/max-temporary#max_temporary_non_const_columns)                     | Максимальное количество временных столбцов, которые должны одновременно находиться в оперативной памяти при выполнении запроса, без учета константных столбцов.                                        |
| [`max_subquery_depth`](/docs/ru/reference/settings/session-settings/max#max_subquery_depth)                                                         | Определяет, что произойдет, если запрос содержит больше вложенных подзапросов, чем указано.                                                                                                            |
| [`max_ast_depth`](/docs/ru/reference/settings/session-settings/max-ast#max_ast_depth)                                                               | Максимальная глубина вложенности синтаксического дерева запроса.                                                                                                                                       |
| [`max_ast_elements`](/docs/ru/reference/settings/session-settings/max-ast#max_ast_elements)                                                         | Максимальное количество элементов в синтаксическом дереве запроса.                                                                                                                                     |
| [`max_rows_in_set`](/docs/ru/reference/settings/session-settings/max-rows#max_rows_in_set)                                                          | Максимальное количество строк для набора данных в условии IN, созданного из подзапроса.                                                                                                                |
| [`max_bytes_in_set`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_in_set)                                                       | Максимальное количество байтов (несжатых данных), используемых набором в условии IN, созданном из подзапроса.                                                                                          |
| [`set_overflow_mode`](/docs/ru/reference/settings/session-settings/other#set_overflow_mode)                                                         | Определяет, что произойдет, если объем данных превысит одно из ограничений.                                                                                                                            |
| [`max_rows_in_distinct`](/docs/ru/reference/settings/session-settings/max-rows#max_rows_in_distinct)                                                | Максимальное количество различных строк при использовании DISTINCT.                                                                                                                                    |
| [`max_bytes_in_distinct`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_in_distinct)                                             | Максимальный размер состояния в памяти в байтах (в несжатом виде), используемого хеш-таблицей при DISTINCT.                                                                                            |
| [`distinct_overflow_mode`](/docs/ru/reference/settings/session-settings/other#distinct_overflow_mode)                                               | Определяет, что произойдет, если объем данных превысит одно из ограничений.                                                                                                                            |
| [`max_rows_to_transfer`](/docs/ru/reference/settings/session-settings/max-rows#max_rows_to_transfer)                                                | Максимальный размер (в строках), который можно передать на удаленный сервер или сохранить во временной таблице при выполнении GLOBAL IN/JOIN.                                                          |
| [`max_bytes_to_transfer`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_to_transfer)                                             | Максимальное количество байтов (несжатых данных), которое можно передать на удаленный сервер или сохранить во временной таблице при выполнении GLOBAL IN/JOIN.                                         |
| [`transfer_overflow_mode`](/docs/ru/reference/settings/session-settings/other#transfer_overflow_mode)                                               | Определяет, что произойдет, если объем данных превысит одно из ограничений.                                                                                                                            |
| [`max_rows_in_join`](/docs/ru/reference/settings/session-settings/max-rows#max_rows_in_join)                                                        | Ограничивает количество строк в хеш-таблице, используемой при JOIN таблиц.                                                                                                                             |
| [`max_bytes_in_join`](/docs/ru/reference/settings/session-settings/max-bytes#max_bytes_in_join)                                                     | Максимальный размер хеш-таблицы, используемой при JOIN таблиц, в байтах.                                                                                                                               |
| [`join_overflow_mode`](/docs/ru/reference/settings/session-settings/join#join_overflow_mode)                                                        | Определяет, какое действие выполняет ClickHouse при достижении любого из следующих ограничений JOIN.                                                                                                   |
| [`max_partitions_per_insert_block`](/docs/ru/reference/settings/session-settings/max-partitions#max_partitions_per_insert_block)                    | Ограничивает максимальное количество партиций в одном вставляемом блоке; если блок содержит слишком много партиций, будет сгенерировано исключение.                                                    |
| [`throw_on_max_partitions_per_insert_block`](/docs/ru/reference/settings/session-settings/throw-on#throw_on_max_partitions_per_insert_block)        | Позволяет управлять поведением при достижении `max_partitions_per_insert_block`.                                                                                                                       |
| [`max_temporary_data_on_disk_size_for_user`](/docs/ru/reference/settings/session-settings/max-temporary#max_temporary_data_on_disk_size_for_user)   | Максимальный объем данных в байтах, занимаемый временными файлами на диске для всех одновременно выполняющихся запросов пользователя.                                                                  |
| [`max_temporary_data_on_disk_size_for_query`](/docs/ru/reference/settings/session-settings/max-temporary#max_temporary_data_on_disk_size_for_query) | Максимальный объем данных в байтах, занимаемый временными файлами на диске для всех одновременно выполняющихся запросов.                                                                               |
| [`max_sessions_for_user`](/docs/ru/reference/settings/session-settings/max#max_sessions_for_user)                                                   | Максимальное количество одновременных сеансов для одного аутентифицированного пользователя на сервере ClickHouse.                                                                                      |
| [`max_partitions_to_read`](/docs/ru/reference/settings/session-settings/max-partitions#max_partitions_to_read)                                      | Ограничивает максимальное количество партиций, к которым можно обратиться в одном запросе.                                                                                                             |

<div id="obsolete-settings">
  ## Устаревшие настройки
</div>

<Note>
  Следующие настройки устарели.
</Note>

<div id="max-pipeline-depth">
  ### max\_pipeline\_depth
</div>

Максимальная глубина конвейера. Соответствует числу преобразований, через которые проходит каждый
блок данных при обработке запроса. Подсчитывается в пределах
одного сервера. Если глубина конвейера превышает это значение, генерируется исключение.
