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,7 +706,18 @@ 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 { | ||||||
|  |     if (0 == sys_tenant_memory) { | ||||||
|       // SYS tenant MEMORY is auto computed by server_avail_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; |       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); |       int64_t sys_mem = min(sys_mem_based_on_svr_avail_mem, sys_tenant_default_memory_max); | ||||||
| @ -717,10 +729,12 @@ int ObUnitResource::get_sys_tenant_default_memory(int64_t &memory_size) | |||||||
|       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
	 obdev
					obdev