add some diag for DTL auto free

This commit is contained in:
obdev 2023-04-20 03:45:02 +00:00 committed by ob-robot
parent 57be426fa5
commit 10354fdfee
2 changed files with 8 additions and 12 deletions

View File

@ -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<char *>(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;

View File

@ -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_;