INNER JOIN my.billing_h_d1 using intDocID
where deliveryPlaceGLN = '9864012511183' -- по этому условию есть 2 строки из левой таблицы
and toYYYYMM(varDate) = 201807 -- по этому условию есть 17,2 млн строк из правой таблицы
он на каждом из 2 шардов выжирает всю доступную память и падает по ее нехватке (Memory limit (for query) exceeded: would use 17.16 GiB). Как он выполняет джоин? сначала джойнит все, а потом режет условиями? Не верю, что надо пости 18 гб памяти для джойна 2 строк с 17 млн)) Данные шардированы по intDocID
если ничего не изменилось то алгоритм такой: правая таблица загружается в память целиком - это частая причина ошибки по памяти затем JOIN и только потом WHERE
и если это 2 дистрибутед, то к JOIN-ам нужно приписывать GLOBAL. Странно что ошибку по GLOBAL не выдал
В конце запроса Settings partial_merge_join=1
Местами поменять левую и правую? Правая помещается в озу для джойна
Обсуждают сегодня