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

Подскажите, а под optimize какое-то свое ограничение выделения памяти? На

трёх серверах есть таблица с движком ReplicatedReplacingMergeTree, один шард, три реплики. Даю команду optimize table short.tags partition 20210509 на первом узле, на третьем процесс завершается через несколько секунд, на первом "зависает" команда, хотя сам мержинг проходит за сопоставимое с третьим узлом время, а на втором вот такое вижу: Not executing log entry MERGE_PARTS for part 20210509_0_12690_490 because source parts size (1.61 GiB) is greater than the current maximum (1.44 GiB), хотя памяти там свободной море и через считанные минуты начинает мержиться другая таблица с размером объединения 2.5GB. Подскажите, куда посмотреть?

8 ответов

18 просмотров

дело не в памяти, а в свободном месте на ДИСКЕ там динамически высчитывается размер парта максимальный который можно мержить исходя из того что свободно на диске https://github.com/ClickHouse/ClickHouse/blob/495c6e03aa9437dac3cd7a44ab3923390bef9982/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp#L167-L188 граничные значения задаются через настройки MergeTree (см. system.merge_tree_settings) https://clickhouse.tech/docs/en/operations/settings/merge-tree-settings/#max-bytes-to-merge-at-max-space-in-pool и https://clickhouse.tech/docs/en/operations/settings/merge-tree-settings/#max-bytes-to-merge-at-min-space-in-pool

посмотрите какие таблицы у вас сожрали место на диске возможно поможет https://kb.altinity.com/altinity-kb-setup-and-maintenance/altinity-kb-system-tables-eat-my-disk

Роман-Новожилов Автор вопроса

еще посмотрите в настройки background_pool_size текущие https://clickhouse.tech/docs/en/operations/settings/settings/#background_pool_size возможно у вас итак много мержей идет, поэтому свободных entries под OPTIMIZE тупо нет по идее OPTIMIZE на одной реплике, приведет к тому что новые смерженные парты поставятся в очередь на репликацию и скачаются на другие реплики и вам не надо на всех трех реплпиках OPTIMIZE запускать

Роман-Новожилов Автор вопроса
Slach [altinity]
еще посмотрите в настройки background_pool_size те...

Мержей текущих минимально. 10 - максимум.

Роман-Новожилов Автор вопроса
Slach [altinity]
дело не в памяти, а в свободном месте на ДИСКЕ там...

Удивляет то, что на разделе, примотированном под /clickhouse/data/short - места много, но стоило освободить /, на котором оставалось свободно 3ГБ - мержи заработали. Буду выяснять, почему он не тот раздел проверяет.

Роман Новожилов
Мержей текущих минимально. 10 - максимум.

ну значит не 10 посмотрите еще раз в код https://github.com/ClickHouse/ClickHouse/blob/495c6e03aa9437dac3cd7a44ab3923390bef9982/src/Storages/MergeTree/MergeTreeDataMergerMutator.cpp#L167-L188 он вызывается вот тут https://github.com/ClickHouse/ClickHouse/blob/9f5cd35a6963cc556a51218b46b0754dcac7306a/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp#L1147-L1148 и вот тут выводится ваше сообщение об ошибке https://github.com/ClickHouse/ClickHouse/blob/9f5cd35a6963cc556a51218b46b0754dcac7306a/src/Storages/MergeTree/ReplicatedMergeTreeQueue.cpp#L1188-L1202

Роман Новожилов
Удивляет то, что на разделе, примотированном под /...

еще раз. я немного наврал, он проверяет не размер он проверяет кол-во свободных тредов в пуле и от этого динамически по диапозону считает размер

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
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
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта