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

Привет, внезапно у одной из таблиц стали сыпаться ошибки: DB::Exception: Too

many partitions for single INSERT block (more than 100). The limit is controlled by 'max_partitions_per_insert_block' setting.

но только в одной из шард (из 4х). Там у нее две реплики.
Куда смотреть?

25 ответов

44 просмотра

partition by делит на слишком мелкие куски

Nik S.- Автор вопроса
Роман Морозов
partition by делит на слишком мелкие куски

а как так получается что только на одной шарде?

за одну вставку получается очень много частей записывать, может помочь вставка частями, по которым partition by

Nik S.
а как так получается что только на одной шарде?

шардирование по какому-то ключу, по этому ключу перекос данных возможен

Nik S.- Автор вопроса

то есть что конкретно происходит? я делаю insert, о смотрит что по моему ключу шардирвания ему нужно вставить в боле чем 100 патриций и он падает, так?

Nik S.
то есть что конкретно происходит? я делаю insert, ...

не по ключу шардирования, а по ключу из PARTITION BY ... SHARDING KEY используется для того чтобы данные в engine=Distributed распихать по целевым шардам при INSERT

Nik S.- Автор вопроса
Slach [altinity]
не по ключу шардирования, а по ключу из PARTITION...

ок, то если если у меня ключ partition by такой:PARTITION BY toYYYYMM(someDate) то получается я пытаюсь вставить слишком большой диапазон дат вдруг?

Nik S.
ок, то если если у меня ключ partition by такой:PA...

да, если у вас в одном INSERT будет больше 100 разных месяцев, то будет ошибка если вставка однократная, то через SETTINGS max_partition_per_insert_block=XXX можно попробовать разрулить если постоянно так вставляете, то надо смотреть структуру таблицы и запросы к ней... это вредно тем, что вы порождаете большое кол-во партов сразу, которые потом надо мержить...

Nik S.- Автор вопроса
Slach [altinity]
да, если у вас в одном INSERT будет больше 100 ра...

у нас вообще insert ... values там. То есть мы по идее для одной патриции всего делаем insert

Nik S.
у нас вообще insert ... values там. То есть мы по ...

и что? VALUES это просто формат входных данных...

Nik S.- Автор вопроса
Slach [altinity]
и что? VALUES это просто формат входных данных...

а, вы имеете в виду что там может быть большой одной строки

Nik S.- Автор вопроса

что интересно, что мы не вставляем больше чем 100 партов, это точно. таблица у нас ReplicatedReplacingMergeTree. Мы сделали один insert утром, до сих пор эти ошибки валятся (вижу в query_log), и у всех initial_query_id указывает на тот insert утром. Так же для этих insert вижу [replicate] в used_functions Возможно ли что репликация пытается вставить что-то более 100 партов и не может? У нас там 105 патриции в таблице в целом

Nik S.
что интересно, что мы не вставляем больше чем 100 ...

как вариант если вставляли в distributed то оно сложилось по .bin файликам и теперь пытается в фоне эти .bin файлы вставить как FORMAT Native в destination и получает отлуп... посмотрите по initial_query_id что там и куда вставлялось

Nik S.- Автор вопроса
Slach [altinity]
как вариант если вставляли в distributed то оно с...

там такой же insert into .. values.. только в distributed таблицу

Nik S.
там такой же insert into .. values.. только в dist...

SELECT * FROM system.distribution_queue FORMAT Vertical что показывает?

Nik S.- Автор вопроса
Nik S.- Автор вопроса
Slach [altinity]
SELECT * FROM system.distribution_queue FORMAT Ver...

для этой таблицы везде нули и никаких ошибок не вижу

Nik S.- Автор вопроса
Slach [altinity]
SELECT * FROM system.distribution_queue FORMAT Ver...

на двух репликах возвращает error_count = 16 и 17,data_files=1 и в last_exception возвращает: Code: 252. DB::Exception: Received from host4:9000. DB::Exception: Too many partitions for single INSERT block (more than 100). The limit is controlled by 'max_partitions_per_insert_block' setting. Large number of partitions is a common misconception. It will lead to severe negative performance impact, including slow server startup, slow INSERT queries and slow SELECT queries. Recommended total number of partitions for a table is under 1000..10000. Please note, that partitioning is not intended to speed up SELECT queries (ORDER BY key is sufficient to make range queries fast). Partitions are intended for data manipulation (DROP PARTITION, etc).. Stack trace: || | | | | | | 0. DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0xe1e20b5 in /usr/bin/clickhouse | | | | 1. ? @ 0x89ee7d0 in /usr/bin/clickhouse | | | | 2. DB::MergeTreeDataWriter::splitBlockIntoParts(DB::Block const&, unsigned long, std::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::shared_ptr<DB::Context const>, std::shared_ptr<DB::ChunkOffsets>) @ 0x146fc763 in /usr/bin/clickhouse

Nik S.
на двух репликах возвращает error_count = 16 и 17,...

временно поменяйте echo '<clickhouse><profiles><default><max_partitions_per_insert_block>1000</max_partitions_per_insert_block></default></profiles></clickhouse>' > /etc/clickhouse-server/users.d/max_partitions_per_insert_block.xml как рассосется queue, удалите файл

Nik S.- Автор вопроса
Slach [altinity]
временно поменяйте echo '<clickhouse><profiles><d...

этот удалить, правильно? /var/lib/clickhouse/data/db/table/shard4_all_replicas/1.bin

Nik S.- Автор вопроса
Slach [altinity]
вы данные хотите потерять?

ну вы написали "как рассосется queue, удалите файл", понятно что после того как рассосётся

Nik S.
ну вы написали "как рассосется queue, удалите файл...

нет я имел ввиду удалить ранее созданный /etc/clickhouse-server/users.d/max_partitions_per_insert_block.xml

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

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

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...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта