Visão geral
Como parte das configurações, o ClickHouse oferece a possibilidade de impor restrições à complexidade das consultas. Isso ajuda a proteger contra consultas potencialmente intensivas em recursos, garantindo uma execução mais segura e previsível, especialmente na interface do usuário.
Quase todas as restrições se aplicam apenas a consultas SELECT e, no
processamento distribuído de consultas, elas são aplicadas separadamente em cada servidor.
Em geral, o ClickHouse verifica as restrições somente depois que as partes de dados são totalmente processadas, em vez de verificá-las para cada linha. Isso pode levar a situações em que as restrições sejam violadas enquanto a parte está sendo processada.
Configurações de overflow_mode
A maioria das restrições também tem uma configuração overflow_mode, que define o que acontece
quando o limite é excedido e pode assumir um de dois valores:
throw: gera uma exceção (padrão).break: interrompe a execução da consulta e retorna o resultado parcial, como se os dados de origem tivessem se esgotado.
Quando uma consulta é interrompida por max_execution_time com break, algumas operações não conseguem retornar um
resultado parcial com segurança; portanto, em vez de produzir um resultado menor, são interrompidas sem produzir resultado algum. Uma função
que calcula um único valor é interrompida sem produzir esse valor; o fato de a interrupção também chegar ao
cliente como um erro TIMEOUT_EXCEEDED, ou apenas como a ausência de um resultado, depende de onde a consulta foi
interrompida. Uma mutação em uma tabela Memory deixada incompleta pelo timeout mantém a tabela inalterada e
reporta TIMEOUT_EXCEEDED. Um INSERT pode reportar QUERY_WAS_CANCELLED. Algumas operações que aguardam
outras réplicas ou trabalho em segundo plano não são interrompidas por max_execution_time: uma gravação com quórum
continua aguardando até que seu quórum seja atingido ou reporta UNKNOWN_STATUS_OF_INSERT se
insert_quorum_timeout expirar primeiro.
Configurações de group_by_overflow_mode
A configuração group_by_overflow_mode também aceita
o valor any:
any: continua a agregação das chaves que entraram no conjunto, mas não adiciona novas chaves ao conjunto.
Lista de configurações
As configurações a seguir são usadas para aplicar restrições à complexidade das consultas.
| Configuração | Descrição breve |
|---|---|
max_memory_usage |
A quantidade máxima de RAM a ser usada para executar uma consulta em um único servidor. |
max_memory_usage_for_user |
A quantidade máxima de RAM a ser usada para executar as consultas de um usuário em um único servidor. |
max_rows_to_read |
O número máximo de linhas que podem ser lidas de uma tabela ao executar uma consulta. |
max_bytes_to_read |
O número máximo de bytes (de dados descomprimidos) que podem ser lidos de uma tabela ao executar uma consulta. |
read_overflow_mode_leaf |
Define o que acontece quando o volume de dados lidos excede um dos limites dos nós leaf. |
max_rows_to_read_leaf |
O número máximo de linhas que podem ser lidas de uma tabela local em um nó leaf ao executar uma consulta distribuída. |
max_bytes_to_read_leaf |
O número máximo de bytes (de dados descomprimidos) que podem ser lidos de uma tabela local em um nó leaf ao executar uma consulta distribuída. |
read_overflow_mode_leaf |
Define o que acontece quando o volume de dados lidos excede um dos limites dos nós leaf. |
max_rows_to_group_by |
O número máximo de chaves únicas recebidas da agregação. |
group_by_overflow_mode |
Define o que acontece quando o número de chaves únicas para agregação excede o limite. |
max_bytes_before_external_group_by |
Habilita ou desabilita a execução de cláusulas GROUP BY em memória externa. |
max_bytes_ratio_before_external_group_by |
A razão da memória disponível permitida para GROUP BY. Quando esse valor é atingido, a memória externa é usada para agregação. |
max_bytes_before_external_sort |
Habilita ou desabilita a execução de cláusulas ORDER BY em memória externa. |
max_bytes_ratio_before_external_sort |
A razão da memória disponível permitida para ORDER BY. Quando esse valor é atingido, a ordenação externa é usada. |
max_rows_to_sort |
O número máximo de linhas antes da ordenação. Permite limitar o consumo de memória durante a ordenação. |
max_bytes_to_sort |
O número máximo de bytes antes da ordenação. |
sort_overflow_mode |
Define o que acontece se o número de linhas recebidas antes da ordenação exceder um dos limites. |
max_result_rows |
Limita o número de linhas no resultado. |
max_result_bytes |
Limita o tamanho do resultado em bytes (descomprimidos). |
result_overflow_mode |
Define o que fazer se o volume do resultado exceder um dos limites. |
max_execution_time |
O tempo máximo de execução da consulta, em segundos. |
timeout_overflow_mode |
Define o que fazer se a consulta for executada por mais tempo que max_execution_time ou se o tempo estimado de execução for maior que max_estimated_execution_time (a estimativa é verificada apenas com throw). |
max_execution_time_leaf |
Semanticamente semelhante a max_execution_time, mas aplicado apenas aos nós leaf em consultas distribuídas ou remotas. |
timeout_overflow_mode_leaf |
Define o que acontece quando a consulta em um nó leaf é executada por mais tempo que max_execution_time_leaf. |
min_execution_speed |
Velocidade mínima de execução em linhas por segundo. |
min_execution_speed_bytes |
O número mínimo de bytes processados por segundo durante a execução. |
max_execution_speed |
O número máximo de linhas processadas por segundo durante a execução. |
max_execution_speed_bytes |
O número máximo de bytes processados por segundo durante a execução. |
timeout_before_checking_execution_speed |
Verifica se a velocidade de execução não está muito baixa (não inferior a min_execution_speed) após o tempo especificado, em segundos, expirar. |
max_estimated_execution_time |
Tempo máximo estimado de execução da consulta, em segundos. |
max_columns_to_read |
O número máximo de colunas que podem ser lidas de uma tabela em uma única consulta. |
max_temporary_columns |
O número máximo de colunas temporárias que devem ser mantidas na RAM simultaneamente durante a execução de uma consulta, incluindo colunas constantes. |
max_temporary_non_const_columns |
O número máximo de colunas temporárias que devem ser mantidas na RAM simultaneamente durante a execução de uma consulta, sem contar as colunas constantes. |
max_subquery_depth |
Define o que acontece se uma consulta tiver mais subconsultas aninhadas do que o número especificado. |
max_ast_depth |
A profundidade máxima de aninhamento da árvore de sintaxe de uma consulta. |
max_ast_elements |
O número máximo de elementos em uma árvore de sintaxe de consulta. |
max_rows_in_set |
O número máximo de linhas de um conjunto de dados na cláusula IN criado a partir de uma subconsulta. |
max_bytes_in_set |
O número máximo de bytes (de dados não comprimidos) usados por um conjunto na cláusula IN criado a partir de uma subconsulta. |
set_overflow_mode |
Define o que acontece quando a quantidade de dados excede um dos limites. |
max_rows_in_distinct |
O número máximo de linhas distintas ao usar DISTINCT. |
max_bytes_in_distinct |
O número máximo de bytes do estado (em bytes não comprimidos) na memória usado por uma tabela hash ao usar DISTINCT. |
distinct_overflow_mode |
Define o que acontece quando a quantidade de dados excede um dos limites. |
max_rows_to_transfer |
Tamanho máximo (em linhas) que pode ser passado para um servidor remoto ou salvo em uma tabela temporária quando a cláusula GLOBAL IN/JOIN é executada. |
max_bytes_to_transfer |
O número máximo de bytes (dados não comprimidos) que pode ser passado para um servidor remoto ou salvo em uma tabela temporária quando a cláusula GLOBAL IN/JOIN é executada. |
transfer_overflow_mode |
Define o que acontece quando a quantidade de dados excede um dos limites. |
max_rows_in_join |
Limita o número de linhas na tabela hash usada ao fazer JOIN entre tabelas. |
max_bytes_in_join |
O tamanho máximo, em bytes, da tabela hash usada ao fazer JOIN entre tabelas. |
join_overflow_mode |
Define qual ação o ClickHouse executa quando qualquer um dos limites de join a seguir é atingido. |
max_partitions_per_insert_block |
Limita o número máximo de partições em um único bloco inserido, e uma exceção é lançada se o bloco contiver partições demais. |
throw_on_max_partitions_per_insert_block |
Permite controlar o comportamento quando max_partitions_per_insert_block é atingido. |
max_temporary_data_on_disk_size_for_user |
A quantidade máxima de dados consumida por arquivos temporários em disco, em bytes, para todas as consultas do usuário executadas concorrentemente. |
max_temporary_data_on_disk_size_for_query |
A quantidade máxima de dados consumida por arquivos temporários em disco, em bytes, para todas as consultas executadas concorrentemente. |
max_sessions_for_user |
Número máximo de sessões simultâneas por usuário autenticado no servidor ClickHouse. |
max_partitions_to_read |
Limita o número máximo de partições que podem ser acessadas em uma única consulta. |
Configurações obsoletas
max_pipeline_depth
Profundidade máxima do pipeline. Corresponde ao número de transformações pelas quais cada bloco de dados passa durante o processamento da consulta. A contagem é feita dentro dos limites de um único servidor. Se a profundidade do pipeline exceder esse valor, uma exceção será lançada.