BUGFI: forbid frequent freeze

This commit is contained in:
obdev
2023-05-30 12:47:35 +00:00
committed by ob-robot
parent 65046e8219
commit 102cc87bf9
5 changed files with 18 additions and 3 deletions

View File

@ -170,6 +170,10 @@ public:
bool need_do_writing_throttle() const;
bool check_clock_over_seq(const int64_t seq);
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:
ObQSync& get_qs() {
static ObQSync s_qs;

View File

@ -149,6 +149,9 @@ public:
int64_t hazard = hlist_.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(); }
void log_frozen_memstore_info(char* buf, int64_t limit) {
if (NULL != buf && limit > 0) {

View File

@ -950,6 +950,7 @@ int ObTenantFreezer::get_tenant_mem_usage_(ObTenantFreezeCtx &ctx)
int64_t active_memstore_used = 0;
int64_t total_memstore_used = 0;
int64_t total_memstore_hold = 0;
int64_t max_cached_memstore_size = 0;
const uint64_t tenant_id = MTL_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_hold = get_tenant_memory_hold(tenant_id,
ObCtxIds::MEMSTORE_CTX_ID);
max_cached_memstore_size = tenant_allocator->get_max_cached_memstore_size();
}
ctx.active_memstore_used_ = active_memstore_used;
ctx.total_memstore_used_ = total_memstore_used;
ctx.total_memstore_hold_ = total_memstore_hold;
ctx.max_cached_memstore_size_ = max_cached_memstore_size;
return ret;
}
@ -1272,10 +1275,10 @@ bool ObTenantFreezer::need_freeze_(const ObTenantFreezeCtx &ctx)
{
bool need_freeze = false;
// 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;
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;
}
@ -1317,6 +1320,7 @@ int ObTenantFreezer::do_minor_freeze_(const ObTenantFreezeCtx &ctx)
LOG_INFO("[TenantFreezer] A minor freeze is needed",
"active_memstore_used_", ctx.active_memstore_used_,
"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_limit", get_tenant_memory_limit(MTL_ID()),
"mem_tenant_hold", get_tenant_memory_hold(MTL_ID()),

View File

@ -47,7 +47,8 @@ ObTenantFreezeCtx::ObTenantFreezeCtx()
kvcache_mem_(0),
active_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;
total_memstore_used_ = 0;
total_memstore_hold_ = 0;
max_cached_memstore_size_ = 0;
}
ObTenantInfo::ObTenantInfo()

View File

@ -75,6 +75,8 @@ public:
int64_t active_memstore_used_;
int64_t total_memstore_used_;
int64_t total_memstore_hold_;
int64_t max_cached_memstore_size_;
private:
DISABLE_COPY_ASSIGN(ObTenantFreezeCtx);
};