xinyiZzz opened a new pull request, #11485:
URL: https://github.com/apache/doris/pull/11485

   # Proposed changes
   
   Issue Number: close #11480
   
   ## Problem summary
   
   Optimize the returned information when query exceeds memory limit.
   
   mysql client return error:
   ````
   Memory limit exceeded: exec node:unknown, `set exec_mem_limit=xxx` to change 
limit, failed mem consume:<consume_size=977.55 KB, mem_limit=222, 
mem_used=1088408, 
tracker_label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4c9d9, in 
backend=172.24.47.117 free memory left=98.58 GB. details mem usage see be.INFO.
   ````
   
   be.INFO log, divided into three parts:
   1. Exceed memory limit info;
   2. mem tracker limiter and child snapshots
   3. Stack trace
   ```
   W0803 22:10:10.533586 3537580 mem_tracker_limiter.cpp:239] exec 
node:unknown, `set exec_mem_limit=xxx` to change limit, failed mem 
consume:<consume_size=979.46 KB, mem_limit=222, mem_used=2874039, 
tracker_label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, in
    backend=172.24.47.117 free memory left=98.44 GB. details mem usage see 
be.INFO
   MemTrackerLimiter 
Label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, Limit=222.00 B, 
Used=2.74 MB, Peak=1.78 MB, Exceeded=true
       MemTracker Label=RuntimeFilterMgr, Parent 
Label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, Used=0, Peak=0
       MemTracker Label=BufferedBlockMgr2, Parent 
Label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, Used=0, Peak=0
       MemTracker Label=ExecNode:VAGGREGATION_NODE (id=14), Parent 
Label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, Used=0, Peak=0
       MemTracker Label=ExecNode:VOLAP_SCAN_NODE (id=13), Parent 
Label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, Used=0, Peak=0
       MemTracker Label=OlapScanners, Parent 
Label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, Used=0, Peak=0
       MemTracker Label=AggregationNode:Data, Parent 
Label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, Used=515.98 KB, 
Peak=259.98 KB
       MemTracker Label=VDataStreamSender:2147f2fe254a49b1-ad986d48faa4ca12, 
Parent Label=RuntimeState:instance:2147f2fe254a49b1-ad986d48faa4ca12, Used=0, 
Peak=0
    0# 
doris::MemTrackerLimiter::mem_limit_exceeded(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&, long) at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/memory/mem_tracker_limiter.cpp:238
    1# doris::ThreadMemTrackerMgr::exceeded(long) at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/memory/thread_mem_tracker_mgr.cpp:65
    2# void doris::ThreadMemTrackerMgr::flush_untracked_mem<true>() at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/memory/thread_mem_tracker_mgr.h:199
    3# doris::ThreadMemTrackerMgr::consume(long) at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/memory/thread_mem_tracker_mgr.h:170
    4# new_hook(void const*, unsigned long) at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/memory/tcmalloc_hook.h:48
    5# MallocHook::InvokeNewHookSlow(void const*, unsigned long) at 
src/malloc_hook.cc:498
    6# tcmalloc::allocate_full_cpp_throw_oom(unsigned long) at 
src/tcmalloc.cc:1815
    7# snappy::internal::WorkingMemory::WorkingMemory(unsigned long) in 
/mnt/disk1/liyifan/doris/core/output_run/be/lib/doris_be
    8# snappy::Compress(snappy::Source*, snappy::Sink*) in 
/mnt/disk1/liyifan/doris/core/output_run/be/lib/doris_be
    9# snappy::RawCompress(char const*, unsigned long, char*, unsigned long*) 
in /mnt/disk1/liyifan/doris/core/output_run/be/lib/doris_be
   10# doris::vectorized::Block::serialize(doris::PBlock*, unsigned long*, 
unsigned long*, bool) const at 
/mnt/disk1/liyifan/doris/core/be/src/vec/core/block.cpp:722
   11# 
doris::vectorized::VDataStreamSender::serialize_block(doris::vectorized::Block*,
 doris::PBlock*, int) at 
/mnt/disk1/liyifan/doris/core/be/src/vec/sink/vdata_stream_sender.cpp:592
   12# doris::vectorized::VDataStreamSender::Channel::send_current_block(bool) 
at /mnt/disk1/liyifan/doris/core/be/src/vec/sink/vdata_stream_sender.cpp:87
   13# 
doris::vectorized::VDataStreamSender::Channel::add_rows(doris::vectorized::Block*,
 std::vector<int, std::allocator<int> > const&) at 
/mnt/disk1/liyifan/doris/core/be/src/vec/sink/vdata_stream_sender.cpp:218
   14# doris::Status 
doris::vectorized::VDataStreamSender::channel_add_rows<std::vector<doris::vectorized::VDataStreamSender::Channel*,
 std::allocator<doris::vectorized::VDataStreamSender::Channel*> >, 
std::vector<unsigned long, std::allocator<unsigned long> > >(std::vecto
   r<doris::vectorized::VDataStreamSender::Channel*, 
std::allocator<doris::vectorized::VDataStreamSender::Channel*> >&, int, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, int, 
doris::vectorized::Block*) at /mnt/disk1/liyifan/doris/core/be/src/vec/sink/
   vdata_stream_sender.h:316
   15# doris::vectorized::VDataStreamSender::send(doris::RuntimeState*, 
doris::vectorized::Block*) at 
/mnt/disk1/liyifan/doris/core/be/src/vec/sink/vdata_stream_sender.cpp:516
   16# doris::PlanFragmentExecutor::open_vectorized_internal() at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/plan_fragment_executor.cpp:299
   17# doris::PlanFragmentExecutor::open() at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/plan_fragment_executor.cpp:239
   18# doris::FragmentExecState::execute() at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/fragment_mgr.cpp:246
   19# 
doris::FragmentMgr::_exec_actual(std::shared_ptr<doris::FragmentExecState>, 
std::function<void (doris::PlanFragmentExecutor*)>) at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/fragment_mgr.cpp:500
   20# doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams 
const&, std::function<void 
(doris::PlanFragmentExecutor*)>)::{lambda()#1}::operator()() const at 
/mnt/disk1/liyifan/doris/core/be/src/runtime/fragment_mgr.cpp:681
   21# void std::__invoke_impl<void, 
doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams const&, 
std::function<void 
(doris::PlanFragmentExecutor*)>)::{lambda()#1}&>(std::__invoke_other, 
doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams
    const&, std::function<void (doris::PlanFragmentExecutor*)>)::{lambda()#1}&) 
at /mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/bits/invoke.h:61
   22# std::enable_if<is_invocable_r_v<void, 
doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams const&, 
std::function<void (doris::PlanFragmentExecutor*)>)::{lambda()#1}&>, 
void>::type std::__invoke_r<void, 
doris::FragmentMgr::exec_plan_fragment(doris::T
   ExecPlanFragmentParams const&, std::function<void 
(doris::PlanFragmentExecutor*)>)::{lambda()#1}&>(doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams
 const&, std::function<void (doris::PlanFragmentExecutor*)>)::{lambda()#1}&) at 
/mnt/disk1/liyifan/dor
   is/ldb_toolchain/include/c++/11/bits/invoke.h:117
   23# std::_Function_handler<void (), 
doris::FragmentMgr::exec_plan_fragment(doris::TExecPlanFragmentParams const&, 
std::function<void 
(doris::PlanFragmentExecutor*)>)::{lambda()#1}>::_M_invoke(std::_Any_data 
const&) at /mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/1
   1/bits/std_function.h:292
   24# std::function<void ()>::operator()() const at 
/mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/bits/std_function.h:560
   25# doris::FunctionRunnable::run() at 
/mnt/disk1/liyifan/doris/core/be/src/util/threadpool.cpp:45
   26# doris::ThreadPool::dispatch_thread() at 
/mnt/disk1/liyifan/doris/core/be/src/util/threadpool.cpp:548
   27# void std::__invoke_impl<void, void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>(std::__invoke_memfun_deref, void 
(doris::ThreadPool::*&)(), doris::ThreadPool*&) at 
/mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/bits/invoke.h:74
   28# std::__invoke_result<void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>::type std::__invoke<void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&>(void (doris::ThreadPool::*&)(), doris::ThreadPool*&) at 
/mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/bits/invo
   ke.h:97
   29# void std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>::__call<void, , 
0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) at 
/mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/functional:422
   30# void std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>::operator()<, void>() at 
/mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/functional:505
   31# void std::__invoke_impl<void, std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::__invoke_other, 
std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>&) at 
/mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/bits/invoke.h:61
   32# std::enable_if<is_invocable_r_v<void, std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&>, void>::type 
std::__invoke_r<void, std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()>&) a
   t /mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/bits/invoke.h:117
   33# std::_Function_handler<void (), std::_Bind<void 
(doris::ThreadPool::*(doris::ThreadPool*))()> >::_M_invoke(std::_Any_data 
const&) at 
/mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/bits/std_function.h:292
   34# std::function<void ()>::operator()() const at 
/mnt/disk1/liyifan/doris/ldb_toolchain/include/c++/11/bits/std_function.h:560
   35# doris::Thread::supervise_thread(void*) at 
/mnt/disk1/liyifan/doris/core/be/src/util/thread.cpp:409
   36# start_thread in /lib64/libpthread.so.0
   37# clone in /lib64/libc.so.6
   ```
   
   ## Checklist(Required)
   
   1. Does it affect the original behavior: 
       - [ ] Yes
       - [ ] No
       - [ ] I don't know
   2. Has unit tests been added:
       - [ ] Yes
       - [ ] No
       - [ ] No Need
   3. Has document been added or modified:
       - [ ] Yes
       - [ ] No
       - [ ] No Need
   4. Does it need to update dependencies:
       - [ ] Yes
       - [ ] No
   5. Are there any changes that cannot be rolled back:
       - [ ] Yes (If Yes, please explain WHY)
       - [ ] No
   
   ## Further comments
   
   If this is a relatively large or complex change, kick off the discussion at 
[d...@doris.apache.org](mailto:d...@doris.apache.org) by explaining why you 
chose the solution you did and what alternatives you considered, etc...
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to