Two levels: MemTrackerLimiter (heavyweight, with limits) and MemTracker (lightweight, nested accounting). Thread-local state via ThreadMemTrackerMgr.
SCOPED_ATTACH_TASK?SCOPED_INIT_THREAD_CONTEXT?SCOPED_SWITCH_THREAD_MEM_TRACKER_LIMITER, not manual save/restore?try_reserve() with DEFER_RELEASE_RESERVED() for balanced accounting on every exit?be/src/core/custom_allocator.h such as DorisVector, DorisMap, and DorisUniqueBufferPtr instead of the corresponding standard library ownership typesThreadMemTrackerMgr::consume avoids operations that may allocate recursively?ENABLE_FACTORY_CREATOR classes use create_shared() / create_unique(), not raw new?weak_ptr or raw observer pointers?unique_ptr plus observer raw pointers?Cache::Handle* released after use?LRUCacheValueBase for tracked-byte release?CacheManager for global GC?constexpr, same-header inline, or function-local static?check_mem_used() not just exceed_limit()?