11238
Обсуждаем ClickHouse
не пока
в итоге я правильно понимаю вашу идею:
чтобы я сделал
max_threads=1 и max_block_size = 50000и дальше поднимать max_threads чтобы понимать сколько ядер можно утилизировать и при этом чтобы не выжирало всю память?
чтобы понять сколько памяти будет есть чтение паркетов на максимуме (memory_usage (system.query_log
)
https://clickhouse.com/docs/interfaces/formats/Parquet
о, щас сюда покопаю, спасибо
я бы подозревал что 16 мб это пер колонка, но надо читать описание параметра
Читать полностью…
щас
т.е. у нас есть паркет , у него есть блок
input_format_parquet_prefer_block_bytes прмерно 16 МБ
у нас есть 8 ядер
т.е. каждый блок развернется в памяти но ок на 160 мб
8* 160 мб = 1.6 гб запишется в кх. откуда там на 30 гб?
сорри если не так считаю
Объем всех паркетов за день =2 ГБ
Дак попробуйте, если поможет, то у вас не хватает памяти, чтобы обрабатывать файлы во все потоки
Читать полностью…
но у нас нет проекций, таблицы system.projection_parts system.projection_parts_columns system.projection пустые
Читать полностью…
так я не против ) я просто понять хочу из-за чего проблема с памятью
Читать полностью…
а что за файлы? а то у паркетов, там свой размер блока, через размер роугрупы
Читать полностью…
вот это то и не понятно )
т.е. он нормально читает с 1 до 20 файла, а на 22 условно падает
я делаю вывод, что где то накапление в памяти чего то идет
причем размер max_block_size роли не играет все равно на 20 падает
нет, в таком случае, остальне ядра будут проставить и будет долго грузиться же.
я размером блока же рулю объем обработки батчей
т.е. идея есть много маленькими порциями
в 1 дне: 25 файлов ( по часам)
сорри, я не понимаю связь
да даже если 8 потоков
у него max_block_size = 1
он же не будет пытаться все паркеты в памяти держать,
он прочитал 8 файликов = по 1 строке вставляет (8 строк)
т.е. вы предлагаете сделать max_threads=1 ?
чем это поможет? остальыне 7 ядер будут мержить в фоне?
settings max_threads=1 ?
>он читает в цикле, но не сбрасыавет кеш?
нет, он просто 10005000 файлов разом процессит
вообщем несколько дней бьюсь ) SETTINGS max_block_size = 1 и 100 и 1000 и 10000все равно Exception: (total) memory limit exceeded: would use 26.33 GiB (attempt to allocate chunk of 5.04 MiB), current RSS: 27.58 GiB, maximum: 27.57 GiB. OvercommitTracker decision: Query was selected to stop by OvercommitTracker. Stack trace:
читаю данные с s3 по 1 дню (1 гб в паркете в дне)
мне кажется, он читает в цикле, но не сбрасыавет кеш?
подкиньте плиз идей кудо покопать?
вы кстати не пробовали settings input_format_parquet_use_native_reader_v3=1 ?
Читать полностью…
>Объем всех паркетов за день =2 ГБ
это смешно, в issues у КХ есть специально созданный паркет размером 1МБ чтобы прочитать его надо 400ГБ памяти и в КХ и в spark и в python
calc_time у вас в partition by ?
можете проверить например у mergeTree* таблиц в system.parts колонки min_time и max_time
implicit_projections это проекции созданные в памяти неявно из minmax индексов от partitionby и orderby
читайте как дебажат и воспроизводят иши https://github.com/ClickHouse/ClickHouse/issues?q=is%3Aissue%20state%3Aopen%20optimize_use_implicit_projections
читайте все закрытые и все открытые иши
вы представляете как паркет устроен? что оттуда нельзя прочитать одну строку?
Читать полностью…
Всем привет, столкнулся с проблемой, в КХ заливаются логи командой 'INSERT INTO db.table FORMAT JSONEachRow' в поле c типом String.Проблема: в поле ничего не записывается, вставки пустые, в err.log ошибки отсутствуют, в query.log в эту таблицу по цифрам есть вставка. Может кто-то знает куда копать?
Читать полностью…
input_format_parquet_enable_row_group_prefetch │ 1
input_format_parquet_max_block_size │ 65409
input_format_parquet_prefer_block_bytes │ 16744704
Понял. А чё тогда памяти то не хватает )
Читать полностью…
да, предлагаю. Память у вас улетает, потому что КХ пытается разом проглотить 10005000 файлов
Читать полностью…
Встречаются двое глухих.
-Ты в баню?
-Да нет в баню.
-А,я подумал ты в баню.
:)
SELECT max(calc_time)Читать полностью…
FROM DB.table
SETTINGS optimize_use_implicit_projections = 0
┌──────max(calc_time)─┐
1. │ 2025-10-21 12:53:07 │
└─────────────────────┘
что показывает
SELECT max(calc_time) FROM DB.table settings optimize_use_implicit_projections=0
┌─statement─────────────────────────────────────────────────────────────────────────────┐Читать полностью…
1. │ CREATE TABLE DB.table ↴│
│↳( ↴│
│↳ `directory_service_name` String, ↴│
│↳ `calc_time` DateTime, ↴│
│↳ `calc_type` UInt8, ↴│
│↳ `status` UInt8, ↴│
│↳ `rm_log` String, ↴│
│↳ `ad_log` String ↴│
│↳) ↴│
│↳ENGINE = Distributed('cluster', 'DB', 'table_repl_sharded', rand()) │
└───────────────────────────────────────────────────────────────────────────────────────┘