diff --git a/src/rootserver/ob_ddl_service.cpp b/src/rootserver/ob_ddl_service.cpp index e1fae0d741..d22ffef101 100644 --- a/src/rootserver/ob_ddl_service.cpp +++ b/src/rootserver/ob_ddl_service.cpp @@ -30687,11 +30687,11 @@ int ObDDLService::init_system_variables( HEAP_VAR(ObUnitConfig, unit_config) { if (OB_SYS_TENANT_ID == sys_variable_schema.get_tenant_id()) { // When creating a system tenant, the default value of px_thread_count is related to - // default sys tenant max cpu - const int64_t sys_default_max_cpu = - static_cast(GCONF.get_sys_tenant_default_max_cpu()); + // default sys tenant min cpu + const int64_t sys_default_min_cpu = + static_cast(GCONF.get_sys_tenant_default_min_cpu()); default_px_thread_count = ObTenantCpuShare::calc_px_pool_share( - sys_variable_schema.get_tenant_id(), sys_default_max_cpu); + sys_variable_schema.get_tenant_id(), sys_default_min_cpu); } else if (OB_UNLIKELY(NULL == unit_mgr_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unit_mgr_ is null", K(ret), KP(unit_mgr_)); @@ -30702,7 +30702,7 @@ int ObDDLService::init_system_variables( arg.pool_list_.at(0), unit_config))) { LOG_WARN("fail to get unit config", K(ret)); } else { - int64_t cpu_count = static_cast(unit_config.unit_resource().max_cpu()); + int64_t cpu_count = static_cast(unit_config.unit_resource().min_cpu()); default_px_thread_count = ObTenantCpuShare::calc_px_pool_share( sys_variable_schema.get_tenant_id(), cpu_count); } @@ -30711,7 +30711,7 @@ int ObDDLService::init_system_variables( if (OB_SUCC(ret) && use_default_parallel_servers_target && default_px_thread_count > 0) { // target cannot be less than 3, otherwise any px query will not come in - int64_t default_px_servers_target = std::max(3L, static_cast(default_px_thread_count * 0.8)); + int64_t default_px_servers_target = std::max(3L, static_cast(default_px_thread_count)); VAR_INT_TO_STRING(val_buf, default_px_servers_target); SET_TENANT_VARIABLE(SYS_VAR_PARALLEL_SERVERS_TARGET, val_buf); } diff --git a/src/share/ob_tenant_mgr.cpp b/src/share/ob_tenant_mgr.cpp index 4931196f90..1449f962c2 100644 --- a/src/share/ob_tenant_mgr.cpp +++ b/src/share/ob_tenant_mgr.cpp @@ -467,20 +467,18 @@ void ObVirtualTenantManager::ObTenantInfo::reset() is_loaded_ = false; } -int64_t ObTenantCpuShare::calc_px_pool_share(uint64_t tenant_id, int64_t cpu_count) +int64_t ObTenantCpuShare::calc_px_pool_share(uint64_t tenant_id, int64_t min_cpu) { - UNUSED(tenant_id); - /* 按照 cpu_count * concurrency * 0.1 作为默认值 - * 但确保最少分配 3 个 线程给 px pool, - * 计算出的默认值小于 3 时强制设置为 3 - * - * 为什么要保证至少为 3? 这是为了尽可能让 mysqltest - * 都能过。mysqltest 里遇到一般的右深树时,3 个线程 - * 能够保证调度成功,2 则会超时。 - */ - return std::max(3L, - cpu_count * - static_cast(static_cast(GCONF.px_workers_per_cpu_quota.get()) * 0.1)); + int64_t share = 3; + int ret = OB_SUCCESS; + oceanbase::omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id)); + if (!tenant_config.is_valid()) { + share = 3; + COMMON_LOG(ERROR, "fail get tenant config. share default to 3", K(share)); + } else { + share = std::max(3L, min_cpu * tenant_config->px_workers_per_cpu_quota); + } + return share; } } // namespace common diff --git a/src/share/ob_tenant_mgr.h b/src/share/ob_tenant_mgr.h index 74784bf34c..ca58b00a54 100644 --- a/src/share/ob_tenant_mgr.h +++ b/src/share/ob_tenant_mgr.h @@ -129,7 +129,7 @@ class ObTenantCpuShare { public: /* Return value: The number of px threads assigned to tenant_id tenant */ - static int64_t calc_px_pool_share(uint64_t tenant_id, int64_t cpu_count); + static int64_t calc_px_pool_share(uint64_t tenant_id, int64_t min_cpu); }; } diff --git a/src/share/parameter/ob_parameter_seed.ipp b/src/share/parameter/ob_parameter_seed.ipp index 173cdf1636..98cbf2ea4a 100644 --- a/src/share/parameter/ob_parameter_seed.ipp +++ b/src/share/parameter/ob_parameter_seed.ipp @@ -315,7 +315,7 @@ DEF_INT(global_write_halt_residual_memory, OB_CLUSTER_PARAMETER, "30", "(0, 100) "disable write to memstore when observer memstore free memory(plus memory hold by blockcache) lower than this limit, Range: (0, 100)" "limit calc by (memory_limit - system_memory) * global_write_halt_residual_memory/100", ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); -DEF_INT(px_workers_per_cpu_quota, OB_CLUSTER_PARAMETER, "10", "[0,20]", +DEF_INT(px_workers_per_cpu_quota, OB_TENANT_PARAMETER, "10", "[0,20]", "the ratio(integer) between the number of system allocated px workers vs " "the maximum number of threads that can be scheduled concurrently. Range: [0, 20]", ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); diff --git a/src/sql/engine/px/ob_px_admission.cpp b/src/sql/engine/px/ob_px_admission.cpp index 1dc31bbeda..9e22e14cec 100644 --- a/src/sql/engine/px/ob_px_admission.cpp +++ b/src/sql/engine/px/ob_px_admission.cpp @@ -209,7 +209,7 @@ void ObPxSubAdmission::acquire(int64_t max, int64_t min, int64_t &acquired_cnt) LOG_WARN_RET(OB_ERR_UNEXPECTED, "get tenant config failed, use default cpu_quota_concurrency"); upper_bound = tenant->unit_min_cpu() * 4; } else { - upper_bound = tenant->unit_min_cpu() * tenant_config->cpu_quota_concurrency; + upper_bound = tenant->unit_min_cpu() * tenant_config->px_workers_per_cpu_quota; } } acquired_cnt = std::min(max, upper_bound);