GROUP BY и Memory limit exceeded
GROUP BY и Memory limit exceeded
Способ 1
Просто увеличить max_memory_usage
Способ 2
Включить агрегацию во внешней памяти:
max_bytes_before_external_group_by
distributed_aggregation_memory_efficient
Способ 3
Двухпроходная агрегация:
– в подзапросе вычисляем множество ключей,
которые войдут в результат;
– только для них считаем все агрегатные функции.
Способ 3, лучше
Двухпроходная агрегация:
– в подзапросе вычисляем множество ключей,
которые войдут в результат;
– только для них считаем все агрегатные функции.
Чтобы сэкономить память, будем вычислять
множество хэшей вместо множества строк.
Способ 4
Магические опции:
max_rows_to_group_by,
group_by_overflow_mode = 'any'
Способ 6
Выгрузить данные по части ключей.
Сделать несколько проходов.
Способ 7
Посчитать данные для ключей,
которые встречаются часто.
Способ 7, лучше
Посчитать данные для ключей,
которые встречаются часто.
Вывод
Если запрос не укладывается в ограничения,
вы всё-равно можете его выполнить.