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

Всем привет Парочка вопросов по дискам, i/o. Заранее спасибо за любую

инфу

(Этот абзац можно скипнуть, если лень вдумываться в контекст) Исходная проблема. Есть растущая 40тб база, две реплики без шардов, диски 10x10тб raid10, хецнер. Достаточно часто гоняются плохоиндексируемые достаточно произвольные селекты по довольно большой части данных, диски утилизируются этим более-менее наполную (~1G/s), люди желают скорости в сколько-то раз больше. Растут и усложняются требования. Мне кажется разумным вариант пока (до стабилизации общей картины) закидать это всё nvme ssd. Предположим, бюджета пока можно выделить только на 3 шарда по 6 дисков (чтоб хоть хватало места) (а реплику оставить на одной машине с hdd и для селектов не использовать, т.к. производительности ssd-машин должно хватить на всё, по идее).
Из этого следует, что ssd будут "без рейда", т.е. варианты: 1) raid0 2) jbod storage policy 3) внутри машин по контейнеру-шарду на диск

Теперь основной вопрос №1. Контекст - опять же, топорный сценарий "по primary key фильтруется много терабайт, неск произвольных where + count-distinct". Я никак не могу понять, как именно в CH устроена параллелизация чтения с диска(ов), у меня не получилось найти информацию на эту тему. Какие и как особенности данных на это влияют (кол-во партиций, колонок, или нет, или что ещё)? Настройки - max_threads?
Т.е. для большей уверенности хочется понимаить, как CH сможет эффективно утилизировать nvme ssd - тредами и-или поддерживанием большой queue depth, и можно ли на это влиять. (Ну и правильнее настраивать fio для бенча)

Вопрос №2
Из вышеупомянутых трёх multi-disk вариантов (raid0 | jbod storage policy | контейнеры-шарды) существенна ли разница по параллелизуемости/предсказуемости между ними? Если нет, я бы склонялся к jbod, т.к. jbod, по идее, проще настроить и починить (просто заменить диск, и кх перескачает данные с реплики, правильно?), а raid0 ломается целиком, а контейнеры-шарды это головняк. Разумно?

Вопрос №3
По проверке целостности. Во время селекта CH проверяет целостность читаемого? Можно ли отдельно специально триггернуть проверку целостости партов, например? Или разумно ли использовать zfs(linux) и просто периодически гонять scrubbing?

19 ответов

8 просмотров

1. только шардирование позволяет масштабировать кратно, но важный момент что только если выключить/избежать группировки на инициаторе. 2. один cpu core может распаковать поток 500МБ/c, если вы сможете читать 4 ГБайта/c вам надо 8 коров на распаковку, дальше это возможно превратится в 40ГБ/c и вы упретесь в скорости шин памяти и cpu. 3. NVME ни разу не серебряная пуля, и зачастую никакого прироста производительности не дает. 4. в хецнере сеть бесплатная только 1Гбит 5. зачастую дешевле взять много более дешевых серверов чем мало толстых 6. чем больше данных на сервере, тем сложнее наливать реплику при сбое. 7. JBOD, мультидиски самого КХ, не дают никакого прироста производительности, только mdraid / raid10 / raid0 дают кратный прирост. 8. ускорение запросов, уменьшение обрабатываемых данных, предагрегация, дают прирост в 10 - 100 раз. 9. КХ адово обложен чексуммами, при чтении данных чексуммы файлов проверяются, при репликации тоже. Ничего не надо триггерить, все уже встроено. 10. Все практически параллельно выполняется. Данные читаются через первичный индекс всегда (типа index-organized-table), по гранулам, гранулы делятся между тредами, если надо прочитать 8 гранул и есть 8 потоков, то каждый поток будет обрабатывать одну гранулу, читать с диска, декомпрессить, фильтровать, и т.д.

Philipp-Saveliev Автор вопроса
Denny [Altinity]
1. только шардирование позволяет масштабировать кр...

>7. JBOD, мультидиски самого КХ, не дают никакого прироста производительности я эту идею взял отсюда https://altinity.com/blog/2019/11/29/amplifying-clickhouse-capacity-with-multi-volume-storage-part-2 >Read/write speed gains in certain conditions, such as when multiple threads use different disks in parallel. но там без пруфов.. а вот тут https://www.slideshare.net/Altinity/webinar-slides-more-secrets-of-clickhouse-query-performance-by-robert-hodges-altinity-ceo слайд 39-41 - судя по графику на 41, человек проверял. вы уверены, что не дают? :) Я бы протестил, но, к сожалению, сейчас сроки жмут..

Philipp Saveliev
>7. JBOD, мультидиски самого КХ, не дают никакого ...

Если парты находятся на разных дисках, то ускорение есть, пропорциональное числу дисков в JBOD. Но допустим точечный запрос читающий один парт никак не ускориться

Denny [Altinity]
1. только шардирование позволяет масштабировать кр...

вот эти пункты 3. NVME ни разу не серебряная пуля, и зачастую никакого прироста производительности не дает. 7. JBOD, мультидиски самого КХ, не дают никакого прироста производительности, только mdraid / raid10 / raid0 дают кратный прирост. выглядят противоречием. NVME в несколько раз увеличивает линейную скорость, raid0 -удваивает её плюс удваивает IOPS. но iops для КХ вроде не нужен?

Philipp-Saveliev Автор вопроса
Denny [Altinity]
1. только шардирование позволяет масштабировать кр...

>4. в хецнере сеть бесплатная только 1Гбит 10Г внутри хецнера - трафик тоже бесплатно (но за "размещение" и карту - €39, да). Но агрегируются между шардами ведь только результаты их выборок? - т.е. итоговый результат запроса сейчас - маленькая табличка, т.е. диск читается только для обсчёта, в клиент исходные данные не идут. Если я правильно понял посыл ответа. Или, в смысле, что тяжело будет реплицировать по 1Г при проблемах? Это да.. (но допустем терпимо, на салфетке, но ещё подумаю)

Bulat Ziganshin
вот эти пункты 3. NVME ни разу не серебряная пуля...

тут нет противоречия. Во первых там слово зачастую, во вторых объяснено почему при 4 ГБ/c начинаются другие проблемы, особенно в хецнере, там у серверов очень слабые CPU. И я сравниваю 10HDD в raid10 VS 1 NVME, а не 10HDD vs 10 NVME

Philipp Saveliev
>4. в хецнере сеть бесплатная только 1Гбит 10Г вну...

если запрос более менее сложный с подзапросами, довольно часто нужно немного "попотеть" чтобы написать его правильно. были тикеты по этому поводу...

Philipp Saveliev
>4. в хецнере сеть бесплатная только 1Гбит 10Г вну...

1ГБ будет проблемой при передаче огромного объема с шардов на инициатор, надо думать как шардировать данные, заранее

Denny [Altinity]
тут нет противоречия. Во первых там слово зачастую...

так это не проблема. он просто упрётся в скорость cpu раньше, т.е. не получит 6-кратного выигрыша как можно ожидать из сравнения скоростей самих ssd

Bulat Ziganshin
так это не проблема. он просто упрётся в скорость ...

ну и какой смысл было покупать NVME если мы упираемся в CPU?

Denny [Altinity]
ну и какой смысл было покупать NVME если мы упирае...

они по цене всего раза в два дороже, так что смысл есть даже если скорсость хотя бы на 30% вырастет

Bulat Ziganshin
чем sata ssd

Если вам хватает денег чтобы хранить всю дату на ссд, какие у вас вообще могут быть проблемы?

Bulat Ziganshin
чем sata ssd

да пофиг на sata ssd. Они вообще потеряли смысл. Ну и в хецнере выбор такой либо 10 HDD * 10TB , либо 2 NMVE по 2TB (или 4TB), и перфоманс КМК будет сравнимый

Denny [Altinity]
да пофиг на sata ssd. Они вообще потеряли смысл. Н...

да, 2 nvme уже упираются в скорость pcie i/o на десктопах, дальше нужен hedt/server cpu. но у автора вопроса видимо объём данных позволяет хрнаить всё на ssd

Philipp-Saveliev Автор вопроса
Bulat Ziganshin
да, 2 nvme уже упираются в скорость pcie i/o на де...

https://tanelpoder.com/posts/11m-iops-with-10-ssds-on-amd-threadripper-pro-workstation/ :)

Philipp Saveliev
https://tanelpoder.com/posts/11m-iops-with-10-ssds...

это hedt. вы какой вообще сервер брать собираетесь? если ещё не, почитайте про различные процы - сколько там ядер, на какой частоте, что там с pci-e и связью между сокетами

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта