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

Подскажите, а ведь партиции внутри кх нарезаются на part’ы, да? В

чем состоит мотивация резать колонку на part’ы?
Чтобы файл в вызов mmap пролезал?Или что?

7 ответов

9 просмотров

Не партиции нарезаются на парты, а партиции состоят из партов. Вставляя данные в mergetree таблицы они делятся на парты. Потом парты склеиваются в рамках партиции в более крупные. Начиная с какого-то объёма склеивать парты в более крупные не имеет особого смысла, так как это занимает много просто времени и много процессорного времени + требует кучу свободного места на диске. + есть параметр максимального размера парта, более опытные юзеры подскажут.

A-P Автор вопроса
Lamobot
Не партиции нарезаются на парты, а партиции состоя...

а какая разница, хранить все склеенные парты как один, или по отдельности? Разве не один и тот же объем?

A P
а какая разница, хранить все склеенные парты как о...

Данные хранятся отсортированными по первичному ключу... Как вы их соберёте после вставки в один парт? Это нужно разжать старые данные, пересобрать из них новый парт с новыми данными и опять сжать... Почитайте доку кликхауса, там внятно написано почему так сделано. Приблизительно - быстрее записать отсортированные вставленные данные на диск сразу, и потом смержить в более крупные куски(парты)

A P
а какая разница, хранить все склеенные парты как о...

если партов сотни, то селект тормозит на random io каждый инсерт создает парт. парты иммютабл. при мерже парты склеиваются в один новый, старые удаляются. в этом вся суть Merge-Tree

A-P Автор вопроса
Denny [Altinity]
если партов сотни, то селект тормозит на random io...

Это я понял, мне непонятно, с чем связано ограничение парта по размеру сверху. Ну я могу предположить, что их обрабатывать конкурентно удобно

A P
Это я понял, мне непонятно, с чем связано ограниче...

мердж - это чтение всех данных и перезапись после сортировки слиянием. Когда парты слишком большие это неэкономно, и оверхед на ИО заметен. но если ИО резиновый и быстрый, можете увеличить ограничения через МТ-сеттинги

A P
Это я понял, мне непонятно, с чем связано ограниче...

такой дефолт исторически остался. Был момент в октябре 2017, в очередной версии КХ изменили дефолт макс. размера парта с 50ГБ до 100ГБ (план был постепенно довести до 300ГБ), пользователи проапгрейдились и КХ начал мержить все старые партции и КХ у всех стал колом, тратя все ресурсы на мерж, в этот чатик написали 10000 матюгов в адрес разработчиков. С тех пор решили дефолт не менять. Ну и вот представьте у меня 5 партов в партиции по 1TB , 12 часов будет идти мерж в единый парт, будет насиловать диски и cpu и мешать селектам в течении 12 часов, в результате получится один парт и перфоманс селектов увеличится, на 0.001%.

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

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

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
А дальше что?.. Записать в файл, потом в Код?.. И потом разбирать как-то?..
Хаскель Моисеевич Гопник
14
доброго времени. db, dw и прочие исполняются при трансляции или при выполнении программы?
lutayyy
10
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
например asm AT&T ... label: .string "hi" ... # not error lea label(%rip), %rax # error ( not compile ) mov %rip, %rax # not error mov (%rip), %rax из форумов прочитал чт...
Simple Sorcerer
6
Почему никто не подсказал, что можно объявить свои типы данных, в которых меньше полей, чем в отданном джейсоне, и добавлять их по необходимости?
Strange Rabbit
10
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Есть предложения, как подобное можно упростить?
Hemul GM
12
Карта сайта