From fc476bf78e2dd1b93113e665c69bcaf81cd2385e Mon Sep 17 00:00:00 2001 From: Alexey Milovidov Date: Fri, 22 Jun 2012 15:39:13 +0000 Subject: [PATCH] dbms: development [#CONV-5097]. --- dbms/src/Interpreters/InterpreterSelectQuery.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/dbms/src/Interpreters/InterpreterSelectQuery.cpp b/dbms/src/Interpreters/InterpreterSelectQuery.cpp index 3f1f2af4069..97c5117264c 100644 --- a/dbms/src/Interpreters/InterpreterSelectQuery.cpp +++ b/dbms/src/Interpreters/InterpreterSelectQuery.cpp @@ -261,7 +261,16 @@ void InterpreterSelectQuery::executeAggregation(BlockInputStreams & streams, Exp BlockInputStreamPtr & stream = streams[0]; - /// Если потоков несколько, то выполняем параллельную агрегацию + /** Если истчоников слишком много, то склеим их в один (TODO: в max_threads) источников. + * (Иначе агрегация в каждом маленьком источнике, а затем объединение состояний, слишком неэффективна.) + */ + if (streams.size() > context.settings.max_threads) + { + streams[0] = new UnionBlockInputStream(streams, context.settings.max_threads); + streams.resize(1); + } + + /// Если источников несколько, то выполняем параллельную агрегацию if (streams.size() > 1) { stream = maybeAsynchronous(new ParallelAggregatingBlockInputStream(streams, expression, context.settings.max_threads), context.settings.asynchronous);