configurable to memory of hidden sys

This commit is contained in:
obdev
2023-04-13 11:14:08 +00:00
committed by ob-robot
parent 7d5802fad7
commit 463dad3d1e
7 changed files with 72 additions and 12 deletions

View File

@ -384,6 +384,26 @@ int ObTenantNodeBalancer::check_new_tenant(const ObUnitInfoGetter::ObTenantConfi
return ret;
}
int ObTenantNodeBalancer::refresh_hidden_sys_memory()
{
int ret = OB_SUCCESS;
int64_t sys_tenant_memory = 0;
int64_t allowed_mem_limit = 0;
ObTenant *tenant = nullptr;
if (OB_FAIL(omt_->get_tenant(OB_SYS_TENANT_ID, tenant))) {
LOG_WARN("get sys tenant failed", K(ret));
} else if (OB_ISNULL(tenant) || !tenant->is_hidden()) {
// do nothing
} else if (OB_FAIL(ObUnitResource::get_sys_tenant_default_memory(sys_tenant_memory))) {
LOG_WARN("get hidden sys tenant default memory failed", K(ret));
} else if (OB_FAIL(omt_->update_tenant_memory(OB_SYS_TENANT_ID, sys_tenant_memory, allowed_mem_limit))) {
LOG_WARN("update hidden sys tenant memory failed", K(ret));
} else {
LOG_INFO("update hidden sys tenant memory succeed ", K(allowed_mem_limit));
}
return ret;
}
void ObTenantNodeBalancer::periodically_check_tenant()
{
int ret = OB_SUCCESS;
@ -527,6 +547,8 @@ int ObTenantNodeBalancer::refresh_tenant(TenantUnits &units)
} else if (FALSE_IT(omt_->set_synced())) {
} else if (OB_FAIL(check_del_tenants(local_units, units))) {
LOG_WARN("check delete tenant fail", K(ret));
} else if (OB_FAIL(refresh_hidden_sys_memory())) {
LOG_WARN("refresh hidden sys memory failed", K(ret));
}
}

View File

@ -81,6 +81,7 @@ private:
int check_new_tenants(share::TenantUnits &units);
int check_new_tenant(const share::ObUnitInfoGetter::ObTenantConfig &unit, const int64_t abs_timeout_us = INT64_MAX);
int check_del_tenants(const share::TenantUnits &local_units, share::TenantUnits &units);
int refresh_hidden_sys_memory();
void periodically_check_tenant();
int fetch_effective_tenants(const share::TenantUnits &old_tenants, share::TenantUnits &new_tenants);
int refresh_tenant(share::TenantUnits &units);

View File

@ -350,6 +350,16 @@ bool ObConfigMemoryLimitChecker::check(const ObConfigItem &t) const
return is_valid;
}
bool ObConfigTenantMemoryChecker::check(const ObConfigItem &t) const
{
bool is_valid = false;
int64_t value = ObConfigCapacityParser::get(t.str(), is_valid);
if (is_valid) {
is_valid = 0 == value || (value >= ObUnitResource::UNIT_MIN_MEMORY);
}
return is_valid;
}
bool ObConfigQueryRateLimitChecker::check(const ObConfigItem &t) const
{
bool is_valid = false;

View File

@ -345,6 +345,15 @@ private:
DISALLOW_COPY_AND_ASSIGN(ObConfigMemoryLimitChecker);
};
class ObConfigTenantMemoryChecker
: public ObConfigChecker
{
public:
ObConfigTenantMemoryChecker() {}
virtual ~ObConfigTenantMemoryChecker() {};
bool check(const ObConfigItem &t) const;
};
class ObConfigUpgradeStageChecker : public ObConfigChecker
{
public:

View File

@ -282,6 +282,10 @@ DEF_DBL(server_cpu_quota_max, OB_CLUSTER_PARAMETER, "1", "[1,16]",
"the number of maximal vCPUs allocated to the server tenant"
"(a special internal tenant that exists on every observer). Range: [1, 16]",
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::STATIC_EFFECTIVE));
DEF_CAP_WITH_CHECKER(_hidden_sys_tenant_memory, OB_CLUSTER_PARAMETER, "0M",
common::ObConfigTenantMemoryChecker, "[0M,)",
"the size of the memory reserved for hidden sys tenant, 0M means follow the adjusting value.",
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
DEF_DBL(location_cache_cpu_quota, OB_CLUSTER_PARAMETER, "5", "[0,10]",
"the number of vCPUs allocated for the requests regarding location "
"info of the core tables. Range: [0,10] in integer",

View File

@ -689,6 +689,7 @@ int ObUnitResource::get_sys_tenant_default_memory(int64_t &memory_size)
const int64_t sys_tenant_default_memory_max = SYS_TENANT_DEFAULT_MEMORY_MAX;
const int64_t unit_min_memory = UNIT_MIN_MEMORY;
const int64_t __min_full_resource_pool_memory = GCONF.__min_full_resource_pool_memory;
const int64_t sys_tenant_memory = GCONF._hidden_sys_tenant_memory;
const int64_t system_memory = GMEMCONF.get_reserved_server_memory();
const int64_t server_memory_limit = GMEMCONF.get_server_memory_limit();
const int64_t server_avail_memory = server_memory_limit - system_memory;
@ -705,22 +706,35 @@ int ObUnitResource::get_sys_tenant_default_memory(int64_t &memory_size)
LOG_ERROR("server available memory is little than __min_full_resource_pool_memory, can not create sys tenant. "
"try adjust config '__min_full_resource_pool_memory', 'memory_limit' or 'system_memory'.",
KR(ret), K(__min_full_resource_pool_memory), K(server_avail_memory), K(system_memory), K(server_memory_limit));
} else if (OB_UNLIKELY(server_avail_memory < sys_tenant_memory)) {
ret = OB_INVALID_CONFIG;
LOG_ERROR("server available memory is little than sys_tenant_memory, can not create sys tenant. "
"try adjust config 'sys_tenant_memory', 'memory_limit' or 'system_memory'.",
KR(ret), K(sys_tenant_memory), K(server_avail_memory), K(system_memory), K(server_memory_limit));
} else if (OB_UNLIKELY(0 != sys_tenant_memory && sys_tenant_memory < __min_full_resource_pool_memory)) {
ret = OB_INVALID_CONFIG;
LOG_ERROR("sys_tenant_memory is little than __min_full_resource_pool_memory, can not create sys tenant. "
"try adjust config 'sys_tenant_memory' or '__min_full_resource_pool_memory'.",
KR(ret), K(sys_tenant_memory), K(__min_full_resource_pool_memory));
} else {
// SYS tenant MEMORY is auto computed by server_avail_memory
const int64_t sys_mem_based_on_svr_avail_mem = server_avail_memory * sys_tenant_default_memory_percentage / 100;
int64_t sys_mem = min(sys_mem_based_on_svr_avail_mem, sys_tenant_default_memory_max);
if (0 == sys_tenant_memory) {
// SYS tenant MEMORY is auto computed by server_avail_memory
const int64_t sys_mem_based_on_svr_avail_mem = server_avail_memory * sys_tenant_default_memory_percentage / 100;
int64_t sys_mem = min(sys_mem_based_on_svr_avail_mem, sys_tenant_default_memory_max);
// SYS tenant MEMORY is restricted by UNIT_MIN_MEMORY
sys_mem = max(sys_mem, UNIT_MIN_MEMORY);
// SYS tenant MEMORY is restricted by UNIT_MIN_MEMORY
sys_mem = max(sys_mem, UNIT_MIN_MEMORY);
// SYS tenant MEMORY is restricted by __min_full_resource_pool_memory
sys_mem = max(sys_mem, __min_full_resource_pool_memory);
memory_size = sys_mem;
// SYS tenant MEMORY is restricted by __min_full_resource_pool_memory
sys_mem = max(sys_mem, __min_full_resource_pool_memory);
memory_size = sys_mem;
} else {
memory_size = sys_tenant_memory;
}
LOG_INFO("get_sys_tenant_default_memory",
"sys_tenant_default_memory_G", sys_mem/GB,
"sys_mem_based_on_server_avail_mem_G", sys_mem_based_on_svr_avail_mem/GB,
"sys_tenant_default_memory_G", memory_size/GB,
"sys_tenant_memory_G", sys_tenant_memory/GB,
"server_avail_memory_G", server_avail_memory/GB,
K(sys_tenant_default_memory_percentage),
"sys_tenant_default_memory_max_G", sys_tenant_default_memory_max/GB,
@ -729,7 +743,6 @@ int ObUnitResource::get_sys_tenant_default_memory(int64_t &memory_size)
"server_memory_limit_G", server_memory_limit/GB,
"system_memory_G", system_memory/GB);
}
return ret;
}

View File

@ -273,6 +273,7 @@ _force_hash_groupby_dump
_force_hash_join_spill
_force_skip_encoding_partition_id
_hash_area_size
_hidden_sys_tenant_memory
_ignore_system_memory_over_limit_error
_io_callback_thread_count
_large_query_io_percentage