Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Restrições na complexidade das consultas

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.

Navigation