Перейти к содержимому
Последнее обновление

Анализ использования памяти при загрузке

Загрузка данных в Doris делится на два этапа: чтение данных фрагментом и запись данных каналом. Логика выполнения фрагмента загрузки и фрагмента запроса одинакова, но в Stream Load обычно используется только Scan Operator. Канал в основном записывает данные во временную структуру Memtable, после чего Delta Writer сжимает данные и записывает их в файл.

Просмотр использования памяти при загрузке​

Если у Memory Tracker с Label=load, Type=overview где-либо отображается большое значение, это означает, что для загрузки используется много памяти.

MemTrackerLimiter Label=load, Type=overview, Limit=-1.00 B(-1 B), Used=0(0 B), Peak=0(0 B)

Память, используемая Doris для загрузки, делится на две части. Первая часть расходуется на выполнение фрагментов, а вторая используется при создании и сбросе MemTable.

Memory Tracker с Label=AllMemTableMemory, Parent Label=DetailsTrackerSet на веб-странице BE http://{be_host}:{be_web_server_port}/mem_tracker?type=global показывает объём памяти, который все задачи загрузки на этом узле BE используют для создания и сброса MemTable. При ошибке, связанной с превышением лимита памяти процесса или нехваткой доступной памяти, этот Memory Tracker также можно найти в разделе Memory Tracker Summary журнала be.INFO.

MemTracker Label=AllMemTableMemory, Parent Label=DetailsTrackerSet, Used=25.08 MB(26303456 B), Peak=25.08 MB(26303456 B)

Анализ использования памяти при загрузке​

Если значение Label=AllMemTableMemory невелико, основная часть памяти задачи загрузки расходуется на выполнение фрагмента. Метод анализа такой же, как в разделе Анализ использования памяти при выполнении запросов, поэтому здесь он повторно не рассматривается.

Если значение Label=AllMemTableMemory велико, возможно, MemTable не успевает сбрасываться. Можно уменьшить значения параметров load_process_max_memory_limit_percent и load_process_soft_mem_limit_percent в be.conf. Это позволит чаще сбрасывать MemTable, благодаря чему в памяти будет храниться меньше экземпляров MemTable, но количество записываемых файлов увеличится. Если записывается слишком много небольших файлов, нагрузка на compaction возрастает. Если compaction не выполняется своевременно, объём памяти для метаданных увеличивается, запросы замедляются, а при превышении лимита количества файлов загрузка может завершиться ошибкой.

Во время выполнения загрузки проверьте веб-страницу BE /mem_tracker?type=load. По значениям двух групп Memory Tracker Label=MemTableManualInsert и Label=MemTableHookFlush можно определить LoadID и TabletID, для которых MemTable занимает много памяти.