opt tenant cpu usage estimate for adaptive compaction

This commit is contained in:
Fengjingkun
2024-03-29 11:45:20 +00:00
committed by ob-robot
parent 6ad36fca7e
commit 2130f9bbd2
4 changed files with 34 additions and 44 deletions

View File

@ -138,6 +138,10 @@ void ObLogicMacroBlockId::reset() {
column_group_idx_ = 0; column_group_idx_ = 0;
} }
OB_SERIALIZE_MEMBER(ObLogicMacroBlockId, data_seq_, logic_version_, tablet_id_, info_); OB_SERIALIZE_MEMBER(ObLogicMacroBlockId,
data_seq_, //FARM COMPAT WHITELIST: Type not match
logic_version_,
tablet_id_,
info_);
} // blocksstable } // blocksstable
} // oceanbase } // oceanbase

View File

@ -1483,20 +1483,17 @@ bool ObTenantTabletScheduler::get_enable_adaptive_compaction()
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
bool enable_adaptive_compaction = enable_adaptive_compaction_; bool enable_adaptive_compaction = enable_adaptive_compaction_;
ObTenantSysStat cur_sys_stat; if (!enable_adaptive_compaction || !enable_adaptive_merge_schedule_) {
if (!enable_adaptive_compaction) {
// do nothing // do nothing
#ifdef ENABLE_DEBUG_LOG #ifdef ENABLE_DEBUG_LOG
} else if (GCONF.enable_crazy_medium_compaction) { } else if (GCONF.enable_crazy_medium_compaction) {
enable_adaptive_compaction = true; enable_adaptive_compaction = true;
LOG_DEBUG("set crazy medium, set enable_adaptive_compaction = true"); LOG_DEBUG("set crazy medium, set enable_adaptive_compaction = true");
#endif #endif
} else if (OB_FAIL(MTL(ObTenantTabletStatMgr *)->get_sys_stat(cur_sys_stat))) { } else if (MTL(ObTenantTabletStatMgr *)->is_high_tenant_cpu_load()) {
LOG_WARN("failed to get tenant sys stat", K(ret), K(cur_sys_stat));
} else if (cur_sys_stat.is_full_cpu_usage()) {
enable_adaptive_compaction = false; enable_adaptive_compaction = false;
if (REACH_TENANT_TIME_INTERVAL(PRINT_LOG_INVERVAL)) { if (REACH_TENANT_TIME_INTERVAL(PRINT_LOG_INVERVAL)) {
FLOG_INFO("disable adaptive compaction due to the high load CPU", K(ret), K(cur_sys_stat)); FLOG_INFO("disable adaptive compaction due to the high load CPU", K(ret));
} }
} }
return enable_adaptive_compaction; return enable_adaptive_compaction;

View File

@ -249,8 +249,7 @@ bool ObTabletStatAnalyzer::has_slow_query() const
/************************************* ObTenantSysStat *************************************/ /************************************* ObTenantSysStat *************************************/
ObTenantSysStat::ObTenantSysStat() ObTenantSysStat::ObTenantSysStat()
: cpu_usage_percentage_(0), : min_cpu_cnt_(0),
min_cpu_cnt_(0),
max_cpu_cnt_(0), max_cpu_cnt_(0),
memory_hold_(0), memory_hold_(0),
memory_limit_(0) memory_limit_(0)
@ -259,7 +258,6 @@ ObTenantSysStat::ObTenantSysStat()
void ObTenantSysStat::reset() void ObTenantSysStat::reset()
{ {
cpu_usage_percentage_ = 0;
min_cpu_cnt_ = 0; min_cpu_cnt_ = 0;
max_cpu_cnt_ = 0; max_cpu_cnt_ = 0;
memory_hold_ = 0; memory_hold_ = 0;
@ -277,15 +275,18 @@ bool ObTenantSysStat::is_small_tenant() const
return bret; return bret;
} }
bool ObTenantSysStat::is_full_cpu_usage() const int ObTenantSysStat::refresh(const uint64_t tenant_id)
{ {
bool bret = false; int ret = OB_SUCCESS;
if (is_small_tenant()) {
bret = 75 <= cpu_usage_percentage_; if (!REACH_TENANT_TIME_INTERVAL(300_s)) {
} else if (OB_FAIL(GCTX.omt_->get_tenant_cpu(tenant_id, min_cpu_cnt_, max_cpu_cnt_))) {
LOG_WARN("failed to get tenant cpu count", K(ret));
} else { } else {
bret = 85 <= cpu_usage_percentage_; memory_hold_ = lib::get_tenant_memory_hold(tenant_id);
memory_limit_ = lib::get_tenant_memory_limit(tenant_id);
} }
return bret; return ret;
} }
@ -583,6 +584,7 @@ ObTenantTabletStatMgr::ObTenantTabletStatMgr()
bucket_lock_(), bucket_lock_(),
report_queue_(), report_queue_(),
load_shedder_(), load_shedder_(),
sys_stat_(),
report_cursor_(0), report_cursor_(0),
pending_cursor_(0), pending_cursor_(0),
report_tg_id_(0), report_tg_id_(0),
@ -619,7 +621,7 @@ int ObTenantTabletStatMgr::init(const int64_t tenant_id)
} else if (OB_FAIL(TG_SCHEDULE(report_tg_id_, report_stat_task_, TABLET_STAT_PROCESS_INTERVAL, repeat))) { } else if (OB_FAIL(TG_SCHEDULE(report_tg_id_, report_stat_task_, TABLET_STAT_PROCESS_INTERVAL, repeat))) {
LOG_WARN("failed to schedule tablet stat update task", K(ret)); LOG_WARN("failed to schedule tablet stat update task", K(ret));
} else { } else {
load_shedder_.refresh_sys_load(); refresh_sys_stat();
is_inited_ = true; is_inited_ = true;
} }
if (!is_inited_) { if (!is_inited_) {
@ -672,6 +674,7 @@ void ObTenantTabletStatMgr::reset()
} }
bucket_lock_.destroy(); bucket_lock_.destroy();
load_shedder_.reset(); load_shedder_.reset();
sys_stat_.reset();
FLOG_INFO("ObTenantTabletStatMgr destroyed!"); FLOG_INFO("ObTenantTabletStatMgr destroyed!");
} }
@ -821,37 +824,18 @@ int ObTenantTabletStatMgr::get_tablet_analyzer(
ObTabletStatAnalyzer &analyzer) ObTabletStatAnalyzer &analyzer)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObTenantSysStat sys_stat;
if (OB_FAIL(get_latest_tablet_stat(ls_id, tablet_id, analyzer.tablet_stat_))) { if (OB_FAIL(get_latest_tablet_stat(ls_id, tablet_id, analyzer.tablet_stat_))) {
if (OB_HASH_NOT_EXIST != ret) { if (OB_HASH_NOT_EXIST != ret) {
LOG_WARN("failed to get latest tablet stat", K(ret), K(ls_id), K(tablet_id)); LOG_WARN("failed to get latest tablet stat", K(ret), K(ls_id), K(tablet_id));
} }
} else if (OB_FAIL(get_sys_stat(sys_stat))) {
LOG_WARN("failed to get sys stat", K(ret));
} else { } else {
analyzer.is_small_tenant_ = sys_stat.is_small_tenant(); analyzer.is_small_tenant_ = sys_stat_.is_small_tenant();
analyzer.boost_factor_ = analyzer.is_small_tenant_ ? 2 : 1; analyzer.boost_factor_ = analyzer.is_small_tenant_ ? 2 : 1;
} }
return ret; return ret;
} }
int ObTenantTabletStatMgr::get_sys_stat(ObTenantSysStat &sys_stat)
{
int ret = OB_SUCCESS;
if (OB_FAIL(GCTX.omt_->get_tenant_cpu_usage(MTL_ID(), sys_stat.cpu_usage_percentage_))) {
LOG_WARN("failed to get tenant cpu usage", K(ret), K(sys_stat));
} else if (OB_FAIL(GCTX.omt_->get_tenant_cpu(MTL_ID(), sys_stat.min_cpu_cnt_, sys_stat.max_cpu_cnt_))) {
LOG_WARN("failed to get tenant cpu count", K(ret), K(sys_stat));
} else {
sys_stat.memory_hold_ = lib::get_tenant_memory_hold(MTL_ID());
sys_stat.memory_limit_ = lib::get_tenant_memory_limit(MTL_ID());
sys_stat.cpu_usage_percentage_ *= 100 * 100;
}
return ret;
}
int ObTenantTabletStatMgr::update_tablet_stream(const ObTabletStat &report_stat) int ObTenantTabletStatMgr::update_tablet_stream(const ObTabletStat &report_stat)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
@ -959,10 +943,16 @@ void ObTenantTabletStatMgr::refresh_all(const int64_t step)
} }
} }
void ObTenantTabletStatMgr::refresh_sys_stat()
{
(void) sys_stat_.refresh(MTL_ID());
load_shedder_.refresh_sys_load();
}
void ObTenantTabletStatMgr::TabletStatUpdater::runTimerTask() void ObTenantTabletStatMgr::TabletStatUpdater::runTimerTask()
{ {
mgr_.process_stats(); mgr_.process_stats();
mgr_.refresh_sys_load(); mgr_.refresh_sys_stat();
int64_t interval_step = 0; int64_t interval_step = 0;
if (CHECK_SCHEDULE_TIME_INTERVAL(CHECK_INTERVAL, interval_step)) { if (CHECK_SCHEDULE_TIME_INTERVAL(CHECK_INTERVAL, interval_step)) {

View File

@ -139,12 +139,10 @@ public:
~ObTenantSysStat() = default; ~ObTenantSysStat() = default;
void reset(); void reset();
bool is_small_tenant() const; bool is_small_tenant() const;
bool is_full_cpu_usage() const; int refresh(const uint64_t tenant_id);
TO_STRING_KV(K_(cpu_usage_percentage), K_(min_cpu_cnt), K_(max_cpu_cnt), K_(memory_hold), K_(memory_limit)); TO_STRING_KV(K_(min_cpu_cnt), K_(max_cpu_cnt), K_(memory_hold), K_(memory_limit));
public: public:
static constexpr double EPS = 1e-9;
double cpu_usage_percentage_;
double min_cpu_cnt_; double min_cpu_cnt_;
double max_cpu_cnt_; double max_cpu_cnt_;
int64_t memory_hold_; int64_t memory_hold_;
@ -377,11 +375,11 @@ public:
int clear_tablet_stat( int clear_tablet_stat(
const share::ObLSID &ls_id, const share::ObLSID &ls_id,
const common::ObTabletID &tablet_id); const common::ObTabletID &tablet_id);
int get_sys_stat(ObTenantSysStat &sys_stat);
void process_stats(); void process_stats();
void refresh_all(const int64_t step); void refresh_all(const int64_t step);
bool is_high_tenant_cpu_load() const { return get_load_shedding_factor() >= ObTenantSysLoadShedder::DEFAULT_LOAD_SHEDDING_FACTOR; }
int64_t get_load_shedding_factor() const { return load_shedder_.get_load_shedding_factor(); } int64_t get_load_shedding_factor() const { return load_shedder_.get_load_shedding_factor(); }
void refresh_sys_load() { load_shedder_.refresh_sys_load(); } void refresh_sys_stat();
private: private:
class TabletStatUpdater : public common::ObTimerTask class TabletStatUpdater : public common::ObTimerTask
{ {
@ -421,6 +419,7 @@ private:
common::ObBucketLock bucket_lock_; common::ObBucketLock bucket_lock_;
ObTabletStat report_queue_[DEFAULT_MAX_PENDING_CNT]; // 12 * 8 * 40000 bytes ObTabletStat report_queue_[DEFAULT_MAX_PENDING_CNT]; // 12 * 8 * 40000 bytes
ObTenantSysLoadShedder load_shedder_; ObTenantSysLoadShedder load_shedder_;
ObTenantSysStat sys_stat_;
uint64_t report_cursor_; uint64_t report_cursor_;
uint64_t pending_cursor_; uint64_t pending_cursor_;
int report_tg_id_; int report_tg_id_;