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

Добрый день. Есть кластер из 12 нод, на всех реплики (отказаустойчивость

в деле), отдельно прокся-балансировщик.
Обновили CH с версии 20.3.8.53 --> 21.1.7.1
Начали падать часть запросов с global join (не находило поля из правой таблицы)
Методом тыка выставили optimize_skip_unused_shards = 0 (было 1) и заработало. Но теперь другая проблема, некоторые запросы падают по памяти. Почитали, в 20.3.8 была настройка max_memory_usage_for_all_queries = 34 Gb, сейчас её заменили на max_server_memory_usage через max_server_memory_usage_to_ram_ratio, выставили чтоб на выходе было чуть более предыдущих 34 Gb и всё равно на случайных нодах запрос упирается в этот предел. Так понимаю, что на некоторые нодах прилетает несколько больших запросов, которые не пролезают по памяти и что не пролезает - падает. (would use 35.41 GiB (attempt to allocate chunk of 1073741824 bytes)). Соответственно вопрос, как можно решить проблемы кроме как увеличивать тотал используемой ОЗУ? Стоит лимит на один запрос 10 ГБ, кроме этого что-то можно придумать? Какую-то очередь больших запросов сделать?

3 ответов

9 просмотров

Первое конечно полная жесть. Вы результаты-то запросов смотрели? Они вообще что-то отдаленное похожее на правду возвращают? Я бы даунгрейдился в моментально. По второму, какое реальное потребление? Что top/htop показывают?

Alex-Moran Автор вопроса
Denny [Altinity]
Первое конечно полная жесть. Вы результаты-то запр...

Про первый пункт, я понимаю что это вещи абсолютно не связные. Но тем не менее результат запроса очень похож на правду. Очень печально, что пришлось отключить optimize_skip_unused_shards, так как распределение по нодам было не rand(), а даже осмысленное и нагрузку здорово могло снизить. Тем более, что постоянных однотипных запросов хватает. Про второй пункт, очень тяжело отловить ошибку, так как даже одновременное открытие 12 htop'ов не даёт 100% гарантии визуально поймать момент. Да память жрёт) В основном clickhouse_server. Тогда переформулирую вопрос, если в момент запроса, под клик максимально может быть выделено не 35.41 GB, то как раз таки и будут появляться такие ошибки would use 35.41 GiB (attempt to allocate chunk of 1073741824 bytes) Allocator: Cannot mmap 2.00 GiB., errno: 12, strerror: Cannot allocate memory: while executing 'ARRAY JOIN ..... Поэтому банальное снижение до 34GB как и было ранее, может решить проблему?

Alex Moran
Про первый пункт, я понимаю что это вещи абсолютно...

а сколько ОЗУ? Т.е. КХ неправильно меряет или правильно?

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
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
Карта сайта