BUGFI: forbid frequent freeze
This commit is contained in:
@ -170,6 +170,10 @@ public:
|
|||||||
bool need_do_writing_throttle() const;
|
bool need_do_writing_throttle() const;
|
||||||
bool check_clock_over_seq(const int64_t seq);
|
bool check_clock_over_seq(const int64_t seq);
|
||||||
int64_t expected_wait_time(const int64_t seq) const;
|
int64_t expected_wait_time(const int64_t seq) const;
|
||||||
|
int64_t get_max_cached_memstore_size() const
|
||||||
|
{
|
||||||
|
return MAX_CACHED_GROUP_COUNT * ATOMIC_LOAD(&nway_) * (PAGE_SIZE + ACHUNK_PRESERVE_SIZE);
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
ObQSync& get_qs() {
|
ObQSync& get_qs() {
|
||||||
static ObQSync s_qs;
|
static ObQSync s_qs;
|
||||||
|
|||||||
@ -149,6 +149,9 @@ public:
|
|||||||
int64_t hazard = hlist_.hazard();
|
int64_t hazard = hlist_.hazard();
|
||||||
return hazard == INT64_MAX? 0: hazard;
|
return hazard == INT64_MAX? 0: hazard;
|
||||||
}
|
}
|
||||||
|
int64_t get_max_cached_memstore_size() const {
|
||||||
|
return arena_.get_max_cached_memstore_size();
|
||||||
|
}
|
||||||
int64_t get_mem_total_memstore_used() const { return arena_.hold(); }
|
int64_t get_mem_total_memstore_used() const { return arena_.hold(); }
|
||||||
void log_frozen_memstore_info(char* buf, int64_t limit) {
|
void log_frozen_memstore_info(char* buf, int64_t limit) {
|
||||||
if (NULL != buf && limit > 0) {
|
if (NULL != buf && limit > 0) {
|
||||||
|
|||||||
@ -950,6 +950,7 @@ int ObTenantFreezer::get_tenant_mem_usage_(ObTenantFreezeCtx &ctx)
|
|||||||
int64_t active_memstore_used = 0;
|
int64_t active_memstore_used = 0;
|
||||||
int64_t total_memstore_used = 0;
|
int64_t total_memstore_used = 0;
|
||||||
int64_t total_memstore_hold = 0;
|
int64_t total_memstore_hold = 0;
|
||||||
|
int64_t max_cached_memstore_size = 0;
|
||||||
|
|
||||||
const uint64_t tenant_id = MTL_ID();
|
const uint64_t tenant_id = MTL_ID();
|
||||||
if (OB_FAIL(allocator_mgr_->get_tenant_memstore_allocator(tenant_id,
|
if (OB_FAIL(allocator_mgr_->get_tenant_memstore_allocator(tenant_id,
|
||||||
@ -963,10 +964,12 @@ int ObTenantFreezer::get_tenant_mem_usage_(ObTenantFreezeCtx &ctx)
|
|||||||
total_memstore_used = tenant_allocator->get_mem_total_memstore_used();
|
total_memstore_used = tenant_allocator->get_mem_total_memstore_used();
|
||||||
total_memstore_hold = get_tenant_memory_hold(tenant_id,
|
total_memstore_hold = get_tenant_memory_hold(tenant_id,
|
||||||
ObCtxIds::MEMSTORE_CTX_ID);
|
ObCtxIds::MEMSTORE_CTX_ID);
|
||||||
|
max_cached_memstore_size = tenant_allocator->get_max_cached_memstore_size();
|
||||||
}
|
}
|
||||||
ctx.active_memstore_used_ = active_memstore_used;
|
ctx.active_memstore_used_ = active_memstore_used;
|
||||||
ctx.total_memstore_used_ = total_memstore_used;
|
ctx.total_memstore_used_ = total_memstore_used;
|
||||||
ctx.total_memstore_hold_ = total_memstore_hold;
|
ctx.total_memstore_hold_ = total_memstore_hold;
|
||||||
|
ctx.max_cached_memstore_size_ = max_cached_memstore_size;
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -1272,10 +1275,10 @@ bool ObTenantFreezer::need_freeze_(const ObTenantFreezeCtx &ctx)
|
|||||||
{
|
{
|
||||||
bool need_freeze = false;
|
bool need_freeze = false;
|
||||||
// 1. trigger by active memstore used.
|
// 1. trigger by active memstore used.
|
||||||
if (ctx.active_memstore_used_ > ctx.memstore_freeze_trigger_) {
|
if (ctx.active_memstore_used_ > ctx.memstore_freeze_trigger_ + ctx.max_cached_memstore_size_) {
|
||||||
need_freeze = true;
|
need_freeze = true;
|
||||||
LOG_INFO("[TenantFreezer] A minor freeze is needed by active memstore used.",
|
LOG_INFO("[TenantFreezer] A minor freeze is needed by active memstore used.",
|
||||||
K(ctx.active_memstore_used_), K(ctx.memstore_freeze_trigger_));
|
K(ctx.active_memstore_used_), K(ctx.memstore_freeze_trigger_), K(ctx.max_cached_memstore_size_));
|
||||||
}
|
}
|
||||||
return need_freeze;
|
return need_freeze;
|
||||||
}
|
}
|
||||||
@ -1317,6 +1320,7 @@ int ObTenantFreezer::do_minor_freeze_(const ObTenantFreezeCtx &ctx)
|
|||||||
LOG_INFO("[TenantFreezer] A minor freeze is needed",
|
LOG_INFO("[TenantFreezer] A minor freeze is needed",
|
||||||
"active_memstore_used_", ctx.active_memstore_used_,
|
"active_memstore_used_", ctx.active_memstore_used_,
|
||||||
"memstore_freeze_trigger", ctx.memstore_freeze_trigger_,
|
"memstore_freeze_trigger", ctx.memstore_freeze_trigger_,
|
||||||
|
"max_cached_memstore_size", ctx.max_cached_memstore_size_,
|
||||||
"mem_tenant_remain", get_tenant_memory_remain(MTL_ID()),
|
"mem_tenant_remain", get_tenant_memory_remain(MTL_ID()),
|
||||||
"mem_tenant_limit", get_tenant_memory_limit(MTL_ID()),
|
"mem_tenant_limit", get_tenant_memory_limit(MTL_ID()),
|
||||||
"mem_tenant_hold", get_tenant_memory_hold(MTL_ID()),
|
"mem_tenant_hold", get_tenant_memory_hold(MTL_ID()),
|
||||||
|
|||||||
@ -47,7 +47,8 @@ ObTenantFreezeCtx::ObTenantFreezeCtx()
|
|||||||
kvcache_mem_(0),
|
kvcache_mem_(0),
|
||||||
active_memstore_used_(0),
|
active_memstore_used_(0),
|
||||||
total_memstore_used_(0),
|
total_memstore_used_(0),
|
||||||
total_memstore_hold_(0)
|
total_memstore_hold_(0),
|
||||||
|
max_cached_memstore_size_(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,6 +63,7 @@ void ObTenantFreezeCtx::reset()
|
|||||||
active_memstore_used_ = 0;
|
active_memstore_used_ = 0;
|
||||||
total_memstore_used_ = 0;
|
total_memstore_used_ = 0;
|
||||||
total_memstore_hold_ = 0;
|
total_memstore_hold_ = 0;
|
||||||
|
max_cached_memstore_size_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ObTenantInfo::ObTenantInfo()
|
ObTenantInfo::ObTenantInfo()
|
||||||
|
|||||||
@ -75,6 +75,8 @@ public:
|
|||||||
int64_t active_memstore_used_;
|
int64_t active_memstore_used_;
|
||||||
int64_t total_memstore_used_;
|
int64_t total_memstore_used_;
|
||||||
int64_t total_memstore_hold_;
|
int64_t total_memstore_hold_;
|
||||||
|
|
||||||
|
int64_t max_cached_memstore_size_;
|
||||||
private:
|
private:
|
||||||
DISABLE_COPY_ASSIGN(ObTenantFreezeCtx);
|
DISABLE_COPY_ASSIGN(ObTenantFreezeCtx);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user