From 10354fdfee1c1cd674d105b6e1d459ada52be12f Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 20 Apr 2023 03:45:02 +0000 Subject: [PATCH] add some diag for DTL auto free --- src/sql/dtl/ob_dtl_channel_mem_manager.cpp | 13 ++++++------- src/sql/dtl/ob_dtl_channel_mem_manager.h | 7 ++----- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/sql/dtl/ob_dtl_channel_mem_manager.cpp b/src/sql/dtl/ob_dtl_channel_mem_manager.cpp index 5cf03c06f..0d2d3ae8c 100644 --- a/src/sql/dtl/ob_dtl_channel_mem_manager.cpp +++ b/src/sql/dtl/ob_dtl_channel_mem_manager.cpp @@ -25,7 +25,7 @@ using namespace oceanbase::sql::dtl; ObDtlChannelMemManager::ObDtlChannelMemManager(uint64_t tenant_id) : tenant_id_(tenant_id), size_per_buffer_(GCONF.dtl_buffer_size), seqno_(-1), allocator_(tenant_id), pre_alloc_cnt_(0), - max_mem_percent_(0), alloc_cnt_(0), free_cnt_(0), queue_len_(0), real_alloc_cnt_(0), real_free_cnt_(0) + max_mem_percent_(0), alloc_cnt_(0), free_cnt_(0), real_alloc_cnt_(0), real_free_cnt_(0) {} int ObDtlChannelMemManager::init() @@ -75,7 +75,7 @@ void ObDtlChannelMemManager::destroy() } } LOG_WARN("pop buffer from free queue to destroy", - K(ret), K(seqno_), K(free_cnt_), K(alloc_cnt_), K(queue_len_), K(free_cnt)); + K(ret), K(seqno_), K(free_cnt_), K(alloc_cnt_), K(free_queue_.size()), K(free_cnt)); free_queue_.reset(); free_queue_.destroy(); allocator_.reset(); @@ -91,7 +91,6 @@ ObDtlLinkedBuffer *ObDtlChannelMemManager::alloc(int64_t chid, int64_t size) allocated_buf = new (buf) ObDtlLinkedBuffer( static_cast(buf) + sizeof (ObDtlLinkedBuffer), size_per_buffer_); allocated_buf->allocated_chid() = chid; - decrease_free_queue_cnt(); } else { if (OB_ENTRY_NOT_EXIST == ret) { LOG_TRACE("queue has no element", K(ret), K(seqno_), K(free_queue_.size())); @@ -135,7 +134,7 @@ ObDtlLinkedBuffer *ObDtlChannelMemManager::alloc(int64_t chid, int64_t size) } LOG_TRACE("channel memory status", K(get_alloc_cnt()), K(get_free_cnt()), K(get_free_queue_length()), K(get_max_tenant_memory_limit_size()), K(get_max_dtl_memory_size()), - K(get_used_memory_size()), K(max_mem_percent_)); + K(get_used_memory_size()), K(max_mem_percent_), KP(allocated_buf), K(seqno_)); return allocated_buf; } @@ -148,7 +147,6 @@ int ObDtlChannelMemManager::free(ObDtlLinkedBuffer *buf, bool auto_free) if (OB_FAIL(free_queue_.push(buf))) { LOG_TRACE("failed to push back buffer", K(ret), K(seqno_), K(free_queue_.size())); } else { - increase_free_queue_cnt(); increase_free_cnt(); buf = NULL; } @@ -157,7 +155,7 @@ int ObDtlChannelMemManager::free(ObDtlLinkedBuffer *buf, bool auto_free) real_free(buf); increase_free_cnt(); } - LOG_TRACE("channel memory status", K(get_alloc_cnt()), K(get_free_cnt()), K(get_free_queue_length())); + LOG_TRACE("channel memory status", K(get_alloc_cnt()), K(get_free_cnt()), K(get_free_queue_length()), KP(buf), K(seqno_), K(auto_free)); } return ret; } @@ -168,7 +166,7 @@ void ObDtlChannelMemManager::real_free(ObDtlLinkedBuffer *buf) ++real_free_cnt_; buf->~ObDtlLinkedBuffer(); allocator_.free(buf); - LOG_TRACE("Trace to free buffer", K(seqno_)); + LOG_TRACE("Trace to free buffer", K(seqno_), KP(buf)); } } @@ -179,6 +177,7 @@ int ObDtlChannelMemManager::auto_free_on_time(int64_t cur_max_reserve_count) if (cur_max_reserve_count <= 0) { cur_max_reserve_count = 1; } + LOG_TRACE("trace auto free", K(get_alloc_cnt()), K(get_free_cnt()), K(get_free_queue_length()), K(seqno_), K(cur_max_reserve_count)); if (free_queue_.size() > cur_max_reserve_count) { int64_t delta = alloc_cnt_ - pre_alloc_cnt_; int64_t delta_per_sec = delta / ts; diff --git a/src/sql/dtl/ob_dtl_channel_mem_manager.h b/src/sql/dtl/ob_dtl_channel_mem_manager.h index 57331d080..789f26c34 100644 --- a/src/sql/dtl/ob_dtl_channel_mem_manager.h +++ b/src/sql/dtl/ob_dtl_channel_mem_manager.h @@ -47,7 +47,7 @@ public: OB_INLINE int64_t get_alloc_cnt() { return alloc_cnt_; } OB_INLINE int64_t get_free_cnt() { return free_cnt_; } - OB_INLINE int64_t get_free_queue_length() { return queue_len_; } + OB_INLINE int64_t get_free_queue_length() { return free_queue_.size(); } OB_INLINE int64_t get_real_alloc_cnt() { return real_alloc_cnt_; } OB_INLINE int64_t get_real_free_cnt() { return real_free_cnt_; } @@ -55,10 +55,8 @@ public: OB_INLINE void increase_alloc_cnt() { ATOMIC_INC(&alloc_cnt_); } OB_INLINE void increase_free_cnt() { ATOMIC_INC(&free_cnt_); } - OB_INLINE void increase_free_queue_cnt() { ATOMIC_INC(&queue_len_); } - OB_INLINE void decrease_free_queue_cnt() { ATOMIC_DEC(&queue_len_); } - int64_t get_total_memory_size() { return size_per_buffer_ * queue_len_; } + int64_t get_total_memory_size() { return size_per_buffer_ * free_queue_.size(); } int get_max_mem_percent(); void update_max_memory_percent(); @@ -87,7 +85,6 @@ private: // some statistics int64_t alloc_cnt_; int64_t free_cnt_; - int64_t queue_len_; int64_t real_alloc_cnt_; int64_t real_free_cnt_;