メインコンテンツまでスキップ
バージョン: 2.1

Load Memory Analysis

Dorisのデータロードは2つのステージに分かれています:fragmentの読み取りとchannelの書き込みです。fragmentとquery fragmentの実行ロジックは同じですが、Stream Loadは通常Scan Operatorのみを持ちます。Channelは主に一時的なデータ構造であるMemtableにデータを書き込み、その後Delta Writerがデータを圧縮してファイルに書き込みます。

ロードメモリビュー

どこかでLabel=load, タイプ=overviewのMemory Trackerの値が大きく表示されている場合、それはロードメモリが多く使用されていることを意味します。

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

Dorisによるメモリロードは2つの部分に分かれています。最初の部分はfragment実行で使用されるメモリで、2番目の部分はMemTableの構築とフラッシュプロセスで使用されるメモリです。

BEウェブページhttp://{be_host}:{be_web_server_port}/mem_tracker?type=globalにあるLabel=AllMemTableMemory, Parent Label=DetailsTrackerSetのMemory Trackerは、このBEノード上のすべてのロードタスクがMemTableを構築およびフラッシュするために使用するメモリです。エラープロセスメモリが制限を超えるか、利用可能メモリが不足している場合、このMemory Trackerはbe.INFOログのMemory Tracker 要約でも確認できます。

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

Load Memory Analysis

Label=AllMemTableMemoryの値が小さい場合、ロードタスクで使用されるメインメモリは実行フラグメントです。分析方法はQuery Memory Analysisと同じなので、ここでは繰り返しません。

Label=AllMemTableMemoryの値が大きい場合、MemTableが適時にフラッシュされていない可能性があります。be.confload_process_max_memory_limit_percentload_process_soft_mem_limit_percentの値を下げることを検討できます。これによりMemTableがより頻繁にフラッシュされ、メモリにキャッシュされるMemTableが減りますが、書き込まれるファイル数は増加します。小さなファイルが多数書き込まれすぎると、compactionの負荷が増加します。compactionが適時でない場合、メタデータメモリが増加し、クエリが遅くなり、ファイル数が制限を超えた後はロードでエラーが報告されることもあります。

ロード実行プロセス中、BEのWebページ/mem_tracker?type=loadを確認してください。2つのグループのメモリトラッカーLabel=MemTableManualInsertLabel=MemTableHookFlushの値により、MemTableメモリ使用量が大きいLoadIDTabletIDを特定できます。