diff --git a/doc/reference_ru.html b/doc/reference_ru.html index f3ee455a1fe..3e2ed7c7598 100644 --- a/doc/reference_ru.html +++ b/doc/reference_ru.html @@ -1995,6 +1995,25 @@ WITH TOTALS может выполняться по-разному при нал Вы можете использовать WITH TOTALS в подзапросах, включая подзапросы в секции JOIN - в этом случае, соответствующие тотальные значения будут соединены. +
GROUP BY во внешней памяти
+ +Существует возможность включить сброс временных данных на диск для ограничения потребления оперативной памяти при GROUP BY. +Настройка %%max_bytes_before_external_group_by%% - потребление оперативки, при котором временные данные GROUP BY сбрасываются в файловую систему. Если равно 0 (по-умолчанию) - значит выключено. + +При использовании %%max_bytes_before_external_group_by%%, рекомендуется выставить %%max_memory_usage%% примерно в два раза больше. Это следует сделать, потому что агрегация выполняется в две стадии: чтение и формирование промежуточных данных (1) и слияние промежуточных данных (2). Сброс данных на файловую систему может производиться только на стадии 1. Если сброса временных данных не было, то на стадии 2 может потребляться до такого же объёма памяти, как на стадии 1. + +Например, если у вас %%max_memory_usage%% было высталвлено в 10000000000, и вы хотите использовать внешнюю агрегацию, то имеет смысл выставить %%max_bytes_before_external_group_by%% в 10000000000, а %%max_memory_usage%% в 20000000000. При срабатывании внешней агрегации (если был хотя бы один сброс временных данных в файловую систему), максимальное потребление оперативки будет лишь чуть-чуть больше %%max_bytes_before_external_group_by%%. + +При распределённой обработке запроса, внешняя агрегация производится на удалённых серверах. Для того, чтобы на сервере-инициаторе запроса использовалось немного оперативки, нужно выставить настройку %%distributed_aggregation_memory_efficient%% в 1. + +При слиянии данных, сброшенных на диск, а также при слиянии результатов с удалённых серверов, при включенной настройке %%distributed_aggregation_memory_efficient%%, потребляется до 1/256 * количество потоков от общего объёма оперативки. + +При включенной внешней агрегации, если данных было меньше %%max_bytes_before_external_group_by%% - то есть, если сброса данных не было, то запрос работает так же быстро, как без внешней агрегации. Если же какие-то временные данные были сброшены, то время выполнения будет в несколько раз больше - примерно в три раза. + +Если после GROUP BY у вас есть ORDER BY с небольшим LIMIT, то на ORDER BY не будет тратиться существенного количества оперативки. +Но если есть ORDER BY без LIMIT, то не забудьте включить внешнюю сортировку (%%max_bytes_before_external_sort%%). + +

Секция HAVING

Позволяет отфильтровать результат, полученный после GROUP BY, аналогично секции WHERE.