20тредов и 64гб. На каждом шарде лежат merge tree локальные таблицы и distributed merge tree, все данные распределены по user_id.
Через шард 1 посылаем запрос к распределенной таблице:
https://codeshare.io/5ev6zx
Нам видится, что это работает так: запрос прилетает в шард-инициатор, далее запрос идёт в каждый шард в локальную таблицу. Считается на шардах и результат возвращается в шард инициатор.
Что должно работать быстрее, чем наш первый не правильный вариант:
https://codeshare.io/2KDEWE
По нашим логам видим что это не так, что мы делаем не правильно? Запросы запускались с разницей по времени часов в 12, поэтому кажется, что кэширование тут ни при чем.
у вас таблицы шардированы одинаково? table_texts и table_users ? Ключ шардирования user_id ?
А более приближенное к реальности условие в подзапросе можно привести? В текущей постановке всё логично, первому запросу нужно по двум таблицам пройти, а второму - по одной, а данных для обмена между нодами проходит незначительное количество :).
Обсуждают сегодня