configurable to memory of hidden sys
This commit is contained in:
@ -384,6 +384,26 @@ int ObTenantNodeBalancer::check_new_tenant(const ObUnitInfoGetter::ObTenantConfi
|
|||||||
return ret;
|
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()
|
void ObTenantNodeBalancer::periodically_check_tenant()
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
@ -527,6 +547,8 @@ int ObTenantNodeBalancer::refresh_tenant(TenantUnits &units)
|
|||||||
} else if (FALSE_IT(omt_->set_synced())) {
|
} else if (FALSE_IT(omt_->set_synced())) {
|
||||||
} else if (OB_FAIL(check_del_tenants(local_units, units))) {
|
} else if (OB_FAIL(check_del_tenants(local_units, units))) {
|
||||||
LOG_WARN("check delete tenant fail", K(ret));
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -81,6 +81,7 @@ private:
|
|||||||
int check_new_tenants(share::TenantUnits &units);
|
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_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 check_del_tenants(const share::TenantUnits &local_units, share::TenantUnits &units);
|
||||||
|
int refresh_hidden_sys_memory();
|
||||||
void periodically_check_tenant();
|
void periodically_check_tenant();
|
||||||
int fetch_effective_tenants(const share::TenantUnits &old_tenants, share::TenantUnits &new_tenants);
|
int fetch_effective_tenants(const share::TenantUnits &old_tenants, share::TenantUnits &new_tenants);
|
||||||
int refresh_tenant(share::TenantUnits &units);
|
int refresh_tenant(share::TenantUnits &units);
|
||||||
|
|||||||
@ -350,6 +350,16 @@ bool ObConfigMemoryLimitChecker::check(const ObConfigItem &t) const
|
|||||||
return is_valid;
|
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 ObConfigQueryRateLimitChecker::check(const ObConfigItem &t) const
|
||||||
{
|
{
|
||||||
bool is_valid = false;
|
bool is_valid = false;
|
||||||
|
|||||||
@ -345,6 +345,15 @@ private:
|
|||||||
DISALLOW_COPY_AND_ASSIGN(ObConfigMemoryLimitChecker);
|
DISALLOW_COPY_AND_ASSIGN(ObConfigMemoryLimitChecker);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ObConfigTenantMemoryChecker
|
||||||
|
: public ObConfigChecker
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ObConfigTenantMemoryChecker() {}
|
||||||
|
virtual ~ObConfigTenantMemoryChecker() {};
|
||||||
|
bool check(const ObConfigItem &t) const;
|
||||||
|
};
|
||||||
|
|
||||||
class ObConfigUpgradeStageChecker : public ObConfigChecker
|
class ObConfigUpgradeStageChecker : public ObConfigChecker
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|||||||
@ -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"
|
"the number of maximal vCPUs allocated to the server tenant"
|
||||||
"(a special internal tenant that exists on every observer). Range: [1, 16]",
|
"(a special internal tenant that exists on every observer). Range: [1, 16]",
|
||||||
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::STATIC_EFFECTIVE));
|
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]",
|
DEF_DBL(location_cache_cpu_quota, OB_CLUSTER_PARAMETER, "5", "[0,10]",
|
||||||
"the number of vCPUs allocated for the requests regarding location "
|
"the number of vCPUs allocated for the requests regarding location "
|
||||||
"info of the core tables. Range: [0,10] in integer",
|
"info of the core tables. Range: [0,10] in integer",
|
||||||
|
|||||||
@ -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 sys_tenant_default_memory_max = SYS_TENANT_DEFAULT_MEMORY_MAX;
|
||||||
const int64_t unit_min_memory = UNIT_MIN_MEMORY;
|
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 __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 system_memory = GMEMCONF.get_reserved_server_memory();
|
||||||
const int64_t server_memory_limit = GMEMCONF.get_server_memory_limit();
|
const int64_t server_memory_limit = GMEMCONF.get_server_memory_limit();
|
||||||
const int64_t server_avail_memory = server_memory_limit - system_memory;
|
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. "
|
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'.",
|
"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));
|
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 {
|
} else {
|
||||||
// SYS tenant MEMORY is auto computed by server_avail_memory
|
if (0 == sys_tenant_memory) {
|
||||||
const int64_t sys_mem_based_on_svr_avail_mem = server_avail_memory * sys_tenant_default_memory_percentage / 100;
|
// SYS tenant MEMORY is auto computed by server_avail_memory
|
||||||
int64_t sys_mem = min(sys_mem_based_on_svr_avail_mem, sys_tenant_default_memory_max);
|
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 tenant MEMORY is restricted by UNIT_MIN_MEMORY
|
||||||
sys_mem = max(sys_mem, UNIT_MIN_MEMORY);
|
sys_mem = max(sys_mem, UNIT_MIN_MEMORY);
|
||||||
|
|
||||||
// SYS tenant MEMORY is restricted by __min_full_resource_pool_memory
|
// SYS tenant MEMORY is restricted by __min_full_resource_pool_memory
|
||||||
sys_mem = max(sys_mem, __min_full_resource_pool_memory);
|
sys_mem = max(sys_mem, __min_full_resource_pool_memory);
|
||||||
|
|
||||||
memory_size = sys_mem;
|
|
||||||
|
|
||||||
|
memory_size = sys_mem;
|
||||||
|
} else {
|
||||||
|
memory_size = sys_tenant_memory;
|
||||||
|
}
|
||||||
LOG_INFO("get_sys_tenant_default_memory",
|
LOG_INFO("get_sys_tenant_default_memory",
|
||||||
"sys_tenant_default_memory_G", sys_mem/GB,
|
"sys_tenant_default_memory_G", memory_size/GB,
|
||||||
"sys_mem_based_on_server_avail_mem_G", sys_mem_based_on_svr_avail_mem/GB,
|
"sys_tenant_memory_G", sys_tenant_memory/GB,
|
||||||
"server_avail_memory_G", server_avail_memory/GB,
|
"server_avail_memory_G", server_avail_memory/GB,
|
||||||
K(sys_tenant_default_memory_percentage),
|
K(sys_tenant_default_memory_percentage),
|
||||||
"sys_tenant_default_memory_max_G", sys_tenant_default_memory_max/GB,
|
"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,
|
"server_memory_limit_G", server_memory_limit/GB,
|
||||||
"system_memory_G", system_memory/GB);
|
"system_memory_G", system_memory/GB);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -273,6 +273,7 @@ _force_hash_groupby_dump
|
|||||||
_force_hash_join_spill
|
_force_hash_join_spill
|
||||||
_force_skip_encoding_partition_id
|
_force_skip_encoding_partition_id
|
||||||
_hash_area_size
|
_hash_area_size
|
||||||
|
_hidden_sys_tenant_memory
|
||||||
_ignore_system_memory_over_limit_error
|
_ignore_system_memory_over_limit_error
|
||||||
_io_callback_thread_count
|
_io_callback_thread_count
|
||||||
_large_query_io_percentage
|
_large_query_io_percentage
|
||||||
|
|||||||
Reference in New Issue
Block a user