[MONITOR] add time guard to keybtree destroy
This commit is contained in:
@ -1615,18 +1615,23 @@ void ObKeyBtree<BtreeKey, BtreeVal>::print(FILE *file) const
|
||||
template<typename BtreeKey, typename BtreeVal>
|
||||
int ObKeyBtree<BtreeKey, BtreeVal>::destroy()
|
||||
{
|
||||
ObTimeGuard tg("keybtree destroy", 50L * 1000L); // 50ms
|
||||
destroy(ATOMIC_SET(&root_, nullptr));
|
||||
tg.click();
|
||||
{
|
||||
HazardList reclaim_list;
|
||||
BtreeNode *p = nullptr;
|
||||
CriticalGuard(get_qsync());
|
||||
get_retire_station().purge(reclaim_list);
|
||||
tg.click();
|
||||
while (OB_NOT_NULL(p = reinterpret_cast<BtreeNode *>(reclaim_list.pop()))) {
|
||||
free_node(p);
|
||||
p = nullptr;
|
||||
}
|
||||
tg.click();
|
||||
}
|
||||
WaitQuiescent(get_qsync());
|
||||
tg.click();
|
||||
return OB_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -59,6 +59,7 @@ struct ObMtStat
|
||||
int64_t ready_for_flush_time_;
|
||||
int64_t create_flush_dag_time_;
|
||||
int64_t release_time_;
|
||||
int64_t push_table_into_gc_queue_time_;
|
||||
int64_t last_print_time_;
|
||||
};
|
||||
|
||||
@ -493,6 +494,7 @@ public:
|
||||
K_(read_barrier), K_(is_flushed), K_(freeze_state), K_(allow_freeze),
|
||||
K_(mt_stat_.frozen_time), K_(mt_stat_.ready_for_flush_time),
|
||||
K_(mt_stat_.create_flush_dag_time), K_(mt_stat_.release_time),
|
||||
K_(mt_stat_.push_table_into_gc_queue_time),
|
||||
K_(mt_stat_.last_print_time), K_(ls_id), K_(transfer_freeze_flag), K_(recommend_snapshot_version));
|
||||
private:
|
||||
static const int64_t OB_EMPTY_MEMSTORE_MAX_SIZE = 10L << 20; // 10MB
|
||||
|
@ -377,6 +377,19 @@ int ObTenantMetaMemMgr::push_table_into_gc_queue(ObITable *table, const ObITable
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to allocate memory for TableGCItem", K(ret), K(size));
|
||||
} else {
|
||||
if (ObITable::TableType::DATA_MEMTABLE == table_type) {
|
||||
ObMemtable *memtable = static_cast<ObMemtable *>(table);
|
||||
memtable::ObMtStat& mt_stat = memtable->get_mt_stat();
|
||||
if (0 == mt_stat.push_table_into_gc_queue_time_) {
|
||||
mt_stat.push_table_into_gc_queue_time_ = ObTimeUtility::current_time();
|
||||
if (0 != mt_stat.release_time_
|
||||
&& mt_stat.push_table_into_gc_queue_time_ -
|
||||
mt_stat.release_time_ >= 10 * 1000 * 1000 /*10s*/) {
|
||||
LOG_WARN("It cost too much time to dec ref cnt", K(ret), KPC(memtable), K(lbt()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
item->table_ = table;
|
||||
item->table_type_ = table_type;
|
||||
if (OB_FAIL(free_tables_queue_.push((ObLink *)item))) {
|
||||
|
Reference in New Issue
Block a user