クエリエラー Memory Tracker制限超過
MEM_LIMIT_EXCEEDEDがクエリまたはロードエラーメッセージに表示され、memory tracker limit exceededが含まれている場合、タスクが単一実行メモリ制限を超えていることを意味します。
エラーメッセージ分析
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.8)[MEM_LIMIT_EXCEEDED]PreCatch error code:11, [E11] Allocator mem tracker check failed, [MEM_LIMIT_EXCEEDED] failed alloc size 1.03 MB, memory tracker limit exceeded, tracker label :Query#Id=f78208b15e064527-a84c5c0b04c04fcf, type:query, limit 100.00 MB, peak used 99.29 MB, current used 99.25 MB. backend 10.16.10.8, process memory used 2.65 GB. exec node:<execute:<ExecNode:VHASH_JOIN _NODE (id=4)>>, can `set exec_mem_limit=8G` to change limit, details see be.INFO.
エラーメッセージは2つの部分に分かれています:
-
failed alloc size 1.03 MB, memory tracker limit exceeded, tracker label:Query#Id=f78208b15e064527-a84c5c0b04c04fcf, type:query, limit 100.00 MB, peak used 99.29 MB, current used 99.25 MB:クエリf78208b15e064527-a84c5c0b04c04fcfが現在実行中です。1.03 MBのメモリを申請しようとした際に、クエリが単一実行のメモリ制限を超過していることが判明しました。クエリメモリ制限は100 MB(Session Variablesのexec_mem_limit)です。現在99.25 MBが使用されており、ピークメモリは99.29 MBです。 -
backend 10.16.10.8, process memory used 2.65 GB. exec node:<execute:<ExecNode:VHASH_JOIN_NODE (id=4)>>, can set exec_mem_limit=8G to change limit, details see be.INFO.:このメモリ申請の場所はVHASH_JOIN_NODE (id=4)であり、単一クエリのメモリ制限はset exec_mem_limitで増加できることが示されています。
単一実行メモリ制限とメモリオーバーイシュアンス
show variables;でDoris Session Veriableを確認できます。exec_mem_limitは単一クエリとloadの実行メモリ制限ですが、Doris 1.2以降、クエリメモリオーバーイシュアンス(overcommit)がサポートされ、クエリがより柔軟なメモリ制限を設定できることを目的としています。メモリが十分にある場合、クエリメモリが上限を超えてもCancelされないため、ユーザーは通常クエリメモリ使用量に注意を払う必要がありません。メモリが不足するまで、新しいメモリを割り当てようとする際にクエリはしばらく待機します。この時、特定のルールに基づいて、mem_usedとexec_mem_limitの比率が大きいクエリが最初にキャンセルされます。待機プロセス中に解放されたメモリ量が要件を満たす場合、クエリは実行を継続します。そうでなければ例外がスローされ、クエリが終了します。
クエリメモリオーバーイシュアンスを無効にしたい場合は、BE Configuration Itemsを参照し、conf/be.confにenable_query_memory_overcommit=falseを追加してください。この時、単一クエリとloadメモリがexec_mem_limitを超えるとキャンセルされます。大きなクエリがクラスター安定性に与える負の影響を回避したい場合、またはクラスター上のタスク実行を正確に制御して十分な安定性を確保したい場合は、クエリメモリオーバーイシュアンスを無効にすることを検討してください。
クエリメモリ分析
クエリのメモリ使用量を分析する必要がある場合は、Query Memory Analysisを参照してください。
set enable_profile=trueを使用してQuery Profileを有効にした後、タスクが単一実行のメモリ制限を超えると、メモリを要求するクエリの呼び出しスタックがbe/log/be.INFOに印刷され、クエリ内の各オペレータの現在のメモリ使用量とピーク値を確認できます。Memory Log Analysisを参照してProcess Memory SummaryとMemory Tracker Summaryを分析し、現在のクエリメモリ使用量が期待に合致するかどうかの確認に役立ててください。
Allocator mem tracker check failed, [MEM_LIMIT_EXCEEDED]failed alloc size 32.00 MB, memory tracker limit exceeded, tracker label:Query#I
d=41363cb6ba734ad5-bc8720bdf9b3090d, type:query, limit 100.00 MB, peak used 75.32 MB, current used 72.62 MB. backend 10.16.10.8, process memory used 2.33 GB. exec node:<>, can `set exec_mem_limit=8G`
to change limit, details see be.INFO.
Process Memory Summary:
os physical memory 375.81 GB. process memory used 2.33 GB(= 2.60 GB[vm/rss] - 280.53 MB[tc/jemalloc_cache] + 0[reserved] + 0B[waiting_refresh]), limit 338.23 GB, soft limit 304.41 GB. sys availab
le memory 337.33 GB(= 337.33 GB[proc/available] - 0[reserved] - 0B[waiting_refresh]), low water mark 6.40 GB, warning water mark 12.80 GB.
Memory Tracker Summary: MemTrackerLimiter Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Type=query, Limit=100.00 MB(104857600 B), Used=72.62 MB(76146688 B), Peak=75.32 MB(78981248 B)
MemTracker Label=HASH_JOIN_SINK_OPERATOR, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=122.00 B(122 B), Peak=122.00 B(122 B)
MemTracker Label=VDataStreamRecvr:41363cb6ba734ad5-bc8720bdf9b309fe, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=0(0 B), Peak=384.00 B(384 B)
MemTracker Label=local data queue mem tracker, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=0(0 B), Peak=384.00 B(384 B)
MemTracker Label=HASH_JOIN_SINK_OPERATOR, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=21.73 MB(22790276 B), Peak=21.73 MB(22790276 B)
MemTracker Label=VDataStreamRecvr:41363cb6ba734ad5-bc8720bdf9b309fe, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=0(0 B), Peak=2.23 MB(2342912 B)
MemTracker Label=local data queue mem tracker, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=0(0 B), Peak=2.23 MB(2342912 B)
MemTracker Label=HASH_JOIN_SINK_OPERATOR, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=24.03 MB(25201284 B), Peak=24.03 MB(25201284 B)
MemTracker Label=VDataStreamRecvr:41363cb6ba734ad5-bc8720bdf9b309fe, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=1.08 MB(1130496 B), Peak=7.17 MB(7520256 B)
MemTracker Label=local data queue mem tracker, Parent Label=Query#Id=41363cb6ba734ad5-bc8720bdf9b3090d, Used=1.08 MB(1130496 B), Peak=7.17 MB(7520256 B)