184 похожих чатов

И ещё раз спрошу про деление работы на репликах. Все

что предлагали с опциями не сработало, время наоборот увеличилось вдвое. Можно ли в итоге как то подключить реплики не как раунд Робин, куда уходит запрос полностью и вычисляется на одной, а делить работу между ними, если существует партицирование. И если это возможно, то где можно почитать в коде то, как реплики будут выбирать себе куски для обработки?

19 ответов

21 просмотр

мечты, мечты. у вас таблицы replicated? результат вообще правильный получился? сколько партов процессилось?

Artem-Pershin Автор вопроса
Denny [Altinity]
мечты, мечты. у вас таблицы replicated? результат...

Не сверял правильность, таблицы реплекейтед, да, одна реплика, просканило в два раза больше строк с опцией allow_allow_experimental_parallel_reading_from_replicas

Artem Pershin
Не сверял правильность, таблицы реплекейтед, да, о...

ну т.е. вообще непонятно КХ понял что это реплики или нет. ОК версия-то какая у КХ ?

Artem Pershin
22.2

сейчас попробовал на 1м шарде с двумя репликами. короче в такой конфигурации всегда читает с локальной реплики, потому что все данные есть локально. работает если prefer_localhost_replica=0; set allow_experimental_parallel_reading_from_replicas=1, max_parallel_replicas=2, prefer_localhost_replica=0;

Artem-Pershin Автор вопроса
Denny [Altinity]
сейчас попробовал на 1м шарде с двумя репликами. к...

А у вас как таблица партицирована? По 500к с каждой реплики прочитало?

Artem Pershin
А у вас как таблица партицирована? По 500к с каждо...

в общем все там кривое и результаты кажется кривые

Artem-Pershin Автор вопроса
Artem Pershin
Жалко, ну видимо не зря экспериментал

в общем разработчики были в курсе, просто не доделано

Artem Pershin
Жалко, ну видимо не зря экспериментал

одна реплика select count() from rep_test1 prewhere S='a'; 0 rows in set. Elapsed: 19.412 sec. Processed 68.16 million rows, 70.17 GB (3.51 million rows/s., 3.61 GB/s.) 8 реплик set allow_experimental_parallel_reading_from_replicas=1, max_parallel_replicas=8, prefer_localhost_replica=0, use_hedged_requests=0; select count() from rep_test1 prewhere S='a'; 0 rows in set. Elapsed: 3.988 sec. Processed 68.16 million rows, 70.17 GB (17.09 million rows/s., 17.60 GB/s.)

Artem-Pershin Автор вопроса
Denny [Altinity]
одна реплика select count() from rep_test1 prewhe...

ну в 6 раз меньше время. но тут prewhere. интересно какой там алгоритм разбиения работы по рекликам и откуда оно знает что результат независим от кусков

Artem Pershin
ну в 6 раз меньше время. но тут prewhere. интересн...

похоже что реплика проверяет выполняет кто-то работу с этим куском или нет, т.е. скорее всего одна реплика может всю работу забрать себе и 7 будут делать ничего. вот без prewhere select uniqHLL12(S) from rep_test1_d; 1 rows in set. Elapsed: 24.430 sec. Processed 68.16 million rows, 70.17 GB (2.79 million rows/s., 2.87 GB/s.) set allow_experimental_parallel_reading_from_replicas=1, max_parallel_replicas=8, prefer_localhost_replica=0, use_hedged_requests=0; select uniqHLL12(S) from rep_test1_d; 1 rows in set. Elapsed: 4.720 sec. Processed 68.16 million rows, 70.17 GB (14.44 million rows/s., 14.86 GB/s.) это искусственно созданная идеальная таблица для allow_experimental_parallel_reading_from_replicas, в реальной жизни конечно это работать будет раз в году, при солнечной погоде.

Artem-Pershin Автор вопроса
Denny [Altinity]
похоже что реплика проверяет выполняет кто-то рабо...

хотя казалось бы group by по партицированной таблице идеально ложится в кейс. Даже не надо заморачиваться с тем что считать кол-во работы, просто тупо считать что в партициях равное кол-во работы и уже норм будет на большинстве кейсов

Artem Pershin
хотя казалось бы group by по партицированной табл...

в реальной жизни финализация результата с шардов на инициаторе занимает примерно половину времени.

Artem-Pershin Автор вопроса
Denny [Altinity]
в реальной жизни финализация результата с шардов н...

странно, если на входе сотни миллионов строк , а на выходе десятки тысяч

Artem Pershin
странно, если на входе сотни миллионов строк , а н...

у вас другая реальность, у меня по жизни инициатор самое проблемное место.

Artem-Pershin Автор вопроса
Denny [Altinity]
у вас другая реальность, у меня по жизни инициатор...

видимо такое распределение данных, что дистрибьютед таблица дает ускорение в n раз, где n -кол-во шардов. Но я не замерял конечно сильно детально , на глаз)

Artem Pershin
видимо такое распределение данных, что дистрибьюте...

в общем оно работает только если prefer_localhost_replica=0, use_hedged_requests=0;

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
Я правильно понимаю что нет способов получить список ожидающих заявок на вступление в группу с помощью бота из mtproto?
Шамиль Прилов
7
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта