max_streams_for_files_processing_in_cluster_functions
max_streams_for_merge_tree_reading
max_streams_for_union_step
UNION (aplica-se tanto a UNION ALL quanto a UNION DISTINCT, porque UNION DISTINCT é implementado por meio de uma etapa UNION ALL seguida de uma etapa DISTINCT). Quando uma consulta UNION tem muitas subconsultas, todas abrem seus buffers de leitura ao mesmo tempo, o que faz o uso de memória ser proporcional ao número de subconsultas. Essa configuração insere processadores Concat para afunilar o pipeline, de modo que no máximo essa quantidade de streams fique ativa ao mesmo tempo, reduzindo drasticamente o pico de memória. O limite real é o valor mínimo entre este valor e max_threads * max_streams_for_union_step_to_max_threads_ratio (se qualquer um deles for 0, ele será ignorado). Quando ambos são 0, nenhum afunilamento é aplicado. O limite também não é aplicado quando o plano da consulta exige que cada fluxo de saída do UNION permaneça ordenado individualmente (por exemplo, quando a otimização de leitura em ordem é aplicada em todo o UNION); nesse caso, a preservação da ordenação tem precedência e o afunilamento é ignorado.
max_streams_for_union_step_to_max_threads_ratio
max_threads determina o limite de streams ativos simultaneamente em uma etapa UNION (aplica-se tanto a UNION ALL quanto a UNION DISTINCT). O limite real é o valor mínimo entre esse valor calculado e max_streams_for_union_step (se qualquer um dos dois for 0, ele será ignorado). Por exemplo, com max_threads = 8 e essa razão definida como 1, no máximo 8 streams estarão ativos. Defina como 0 para desativar esse limite baseado em razão. Assim como max_streams_for_union_step, o limite não é aplicado quando o plano de consulta exige que cada stream de saída do UNION permaneça ordenado individualmente.