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

Добрый вечер! Создаю две таблички ReplicatedReplacingMergeTree с одинаковой структурой, но одну

из них с опцией index_granularity=512
Делаю одинаковые запросы с группировкой по полям из ключа сортировки.
В результате имею следующую производительность.
1. Табличка с index_granularity по умолчанию
Elapsed: 0.303 sec. Processed 33.22 million rows, 1.56 GB (109.68 million rows/s., 5.16 GB/s.)

2. Табличка с index_granularity=512
Elapsed: 0.449 sec. Processed 15.93 million rows, 674.70 MB (35.50 million rows/s., 1.50 GB/s.)

Как можно заметить, в первом случае с диска прочитано почти в 2 раза больше строк данных, но запрос отработал быстрее чем во втором случае.
Соответсвенно вопрос.
Почему так? Ведь по логике, при уменьшении гранулярности увеличивается размер индекса в памяти и клику нужно меньше данных считывать с диска для обработки запроса. По факту, хоть и меньше данных считали, но сам запрос работает дольше.

8 ответов

22 просмотра

например надо больше раз читать, вы читаете в ~2 раза меньше строк, но делаете это в 8192 / 512 = 16 раз менее эффективно. Имеет смысл ставить маленькую гранулярность только если вам надо вычитавыть единичные строки.

Sergey-Ageev Автор вопроса
Konstantin Ilchenko
например надо больше раз читать, вы читаете в ~2 р...

Спасибо! Какие опции клика можно еще глянуть, для ускорения выборки? Сейчас в обоих вариантах пиковый расход памяти около 1GB, можно ли выделить больше памяти для ускорения запроса?

Sergey Ageev
Спасибо! Какие опции клика можно еще глянуть, для ...

неплохо было бы показать как создана таблица и что за запрос, возможно вам поможет optimize_aggregation_in_order = 1 если ещё не включен

Sergey-Ageev Автор вопроса
Konstantin Ilchenko
неплохо было бы показать как создана таблица и что...

Спасибо! optimize_aggregation_in_order = 1 не дает эффекта (

в слепую (ни запроса, ни трейсов) очень сложно... max_bytes_before_external_group_by=0,group_by_two_level_threshold=0,group_by_two_level_threshold_bytes=0,optimize_move_to_prewhere=0

optimize final делался? возможно тупо партов было больше случайно. возможно меньше было потоков, хотя на миллионах строк гранул бы должно хватить. потоки делят работу с помощью гранул SET send_logs_level = 'trace'; дальше запрос и получаете трассу

Sergey-Ageev Автор вопроса
Denny [Altinity]
optimize final делался? возможно тупо партов было ...

optimize final делался. Спасибо, буду трейс изучать

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта