add system variables about auto dop
This commit is contained in:
@ -245,6 +245,9 @@ enum ObSysVarClassType
|
||||
SYS_VAR__SET_REVERSE_DBLINK_INFOS = 10139,
|
||||
SYS_VAR__SHOW_DDL_IN_COMPAT_MODE = 10140,
|
||||
SYS_VAR__FORCE_ORDER_PRESERVE_SET = 10141,
|
||||
SYS_VAR_PARALLEL_DEGREE_POLICY = 10142,
|
||||
SYS_VAR_PARALLEL_DEGREE_LIMIT = 10143,
|
||||
SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD = 10144,
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@ -240,6 +240,9 @@ namespace share
|
||||
static const char* const OB_SV__SET_REVERSE_DBLINK_INFOS = "_set_reverse_dblink_infos";
|
||||
static const char* const OB_SV__SHOW_DDL_IN_COMPAT_MODE = "_show_ddl_in_compat_mode";
|
||||
static const char* const OB_SV__FORCE_ORDER_PRESERVE_SET = "_force_order_preserve_set";
|
||||
static const char* const OB_SV_PARALLEL_DEGREE_POLICY = "parallel_degree_policy";
|
||||
static const char* const OB_SV_PARALLEL_DEGREE_LIMIT = "parallel_degree_limit";
|
||||
static const char* const OB_SV_PARALLEL_MIN_SCAN_TIME_THRESHOLD = "parallel_min_scan_time_threshold";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,6 +116,11 @@ const char *ObSysVarPxDistAggPartialRollupPushdown::_PX_DIST_AGG_PARTIAL_ROLLUP_
|
||||
"ADAPTIVE",
|
||||
0
|
||||
};
|
||||
const char *ObSysVarParallelDegreePolicy::PARALLEL_DEGREE_POLICY_NAMES[] = {
|
||||
"MANUAL",
|
||||
"AUTO",
|
||||
0
|
||||
};
|
||||
|
||||
const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = {
|
||||
"_aggregation_optimization_settings",
|
||||
@ -274,6 +279,9 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = {
|
||||
"ob_trx_timeout",
|
||||
"optimizer_capture_sql_plan_baselines",
|
||||
"optimizer_use_sql_plan_baselines",
|
||||
"parallel_degree_limit",
|
||||
"parallel_degree_policy",
|
||||
"parallel_min_scan_time_threshold",
|
||||
"parallel_servers_target",
|
||||
"performance_schema",
|
||||
"plsql_ccflags",
|
||||
@ -501,6 +509,9 @@ const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = {
|
||||
SYS_VAR_OB_TRX_TIMEOUT,
|
||||
SYS_VAR_OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES,
|
||||
SYS_VAR_OPTIMIZER_USE_SQL_PLAN_BASELINES,
|
||||
SYS_VAR_PARALLEL_DEGREE_LIMIT,
|
||||
SYS_VAR_PARALLEL_DEGREE_POLICY,
|
||||
SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD,
|
||||
SYS_VAR_PARALLEL_SERVERS_TARGET,
|
||||
SYS_VAR_PERFORMANCE_SCHEMA,
|
||||
SYS_VAR_PLSQL_CCFLAGS,
|
||||
@ -795,7 +806,10 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_ID[] = {
|
||||
"_optimizer_gather_stats_on_load",
|
||||
"_set_reverse_dblink_infos",
|
||||
"_show_ddl_in_compat_mode",
|
||||
"_force_order_preserve_set"
|
||||
"_force_order_preserve_set",
|
||||
"parallel_degree_policy",
|
||||
"parallel_degree_limit",
|
||||
"parallel_min_scan_time_threshold"
|
||||
};
|
||||
|
||||
bool ObSysVarFactory::sys_var_name_case_cmp(const char *name1, const ObString &name2)
|
||||
@ -1187,6 +1201,9 @@ int ObSysVarFactory::create_all_sys_vars()
|
||||
+ sizeof(ObSysVarSetReverseDblinkInfos)
|
||||
+ sizeof(ObSysVarShowDdlInCompatMode)
|
||||
+ sizeof(ObSysVarForceOrderPreserveSet)
|
||||
+ sizeof(ObSysVarParallelDegreePolicy)
|
||||
+ sizeof(ObSysVarParallelDegreeLimit)
|
||||
+ sizeof(ObSysVarParallelMinScanTimeThreshold)
|
||||
;
|
||||
void *ptr = NULL;
|
||||
if (OB_ISNULL(ptr = allocator_.alloc(total_mem_size))) {
|
||||
@ -3211,6 +3228,33 @@ int ObSysVarFactory::create_all_sys_vars()
|
||||
ptr = (void *)((char *)ptr + sizeof(ObSysVarForceOrderPreserveSet));
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarParallelDegreePolicy())) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to new ObSysVarParallelDegreePolicy", K(ret));
|
||||
} else {
|
||||
store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast<int64_t>(SYS_VAR_PARALLEL_DEGREE_POLICY))] = sys_var_ptr;
|
||||
ptr = (void *)((char *)ptr + sizeof(ObSysVarParallelDegreePolicy));
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarParallelDegreeLimit())) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to new ObSysVarParallelDegreeLimit", K(ret));
|
||||
} else {
|
||||
store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast<int64_t>(SYS_VAR_PARALLEL_DEGREE_LIMIT))] = sys_var_ptr;
|
||||
ptr = (void *)((char *)ptr + sizeof(ObSysVarParallelDegreeLimit));
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarParallelMinScanTimeThreshold())) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to new ObSysVarParallelMinScanTimeThreshold", K(ret));
|
||||
} else {
|
||||
store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast<int64_t>(SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD))] = sys_var_ptr;
|
||||
ptr = (void *)((char *)ptr + sizeof(ObSysVarParallelMinScanTimeThreshold));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return ret;
|
||||
@ -5701,6 +5745,39 @@ int ObSysVarFactory::create_sys_var(ObSysVarClassType sys_var_id, ObBasicSysVar
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SYS_VAR_PARALLEL_DEGREE_POLICY: {
|
||||
void *ptr = NULL;
|
||||
if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarParallelDegreePolicy)))) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarParallelDegreePolicy)));
|
||||
} else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarParallelDegreePolicy())) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to new ObSysVarParallelDegreePolicy", K(ret));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SYS_VAR_PARALLEL_DEGREE_LIMIT: {
|
||||
void *ptr = NULL;
|
||||
if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarParallelDegreeLimit)))) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarParallelDegreeLimit)));
|
||||
} else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarParallelDegreeLimit())) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to new ObSysVarParallelDegreeLimit", K(ret));
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD: {
|
||||
void *ptr = NULL;
|
||||
if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarParallelMinScanTimeThreshold)))) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarParallelMinScanTimeThreshold)));
|
||||
} else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarParallelMinScanTimeThreshold())) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_ERROR("fail to new ObSysVarParallelMinScanTimeThreshold", K(ret));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
|
||||
@ -1619,6 +1619,29 @@ public:
|
||||
inline virtual ObSysVarClassType get_type() const { return SYS_VAR__FORCE_ORDER_PRESERVE_SET; }
|
||||
inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(223); }
|
||||
};
|
||||
class ObSysVarParallelDegreePolicy : public ObEnumSysVar
|
||||
{
|
||||
public:
|
||||
const static char * PARALLEL_DEGREE_POLICY_NAMES[];
|
||||
public:
|
||||
ObSysVarParallelDegreePolicy() : ObEnumSysVar(PARALLEL_DEGREE_POLICY_NAMES, NULL, NULL, NULL, NULL, NULL) {}
|
||||
inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PARALLEL_DEGREE_POLICY; }
|
||||
inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(224); }
|
||||
};
|
||||
class ObSysVarParallelDegreeLimit : public ObIntSysVar
|
||||
{
|
||||
public:
|
||||
ObSysVarParallelDegreeLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {}
|
||||
inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PARALLEL_DEGREE_LIMIT; }
|
||||
inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(225); }
|
||||
};
|
||||
class ObSysVarParallelMinScanTimeThreshold : public ObIntSysVar
|
||||
{
|
||||
public:
|
||||
ObSysVarParallelMinScanTimeThreshold() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {}
|
||||
inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD; }
|
||||
inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(226); }
|
||||
};
|
||||
|
||||
|
||||
class ObSysVarFactory
|
||||
@ -1638,7 +1661,7 @@ public:
|
||||
static const common::ObString get_sys_var_name_by_id(ObSysVarClassType sys_var_id);
|
||||
|
||||
const static int64_t MYSQL_SYS_VARS_COUNT = 97;
|
||||
const static int64_t OB_SYS_VARS_COUNT = 127;
|
||||
const static int64_t OB_SYS_VARS_COUNT = 130;
|
||||
const static int64_t ALL_SYS_VARS_COUNT = MYSQL_SYS_VARS_COUNT + OB_SYS_VARS_COUNT;
|
||||
|
||||
const static int16_t OB_SPECIFIC_SYS_VAR_ID_OFFSET = 10000;
|
||||
|
||||
@ -2939,13 +2939,54 @@ static struct VarsInit{
|
||||
ObSysVars[223].alias_ = "OB_SV__FORCE_ORDER_PRESERVE_SET" ;
|
||||
}();
|
||||
|
||||
[&] (){
|
||||
ObSysVars[224].info_ = "specifies whether automatic degree of parallelism will be enabled" ;
|
||||
ObSysVars[224].name_ = "parallel_degree_policy" ;
|
||||
ObSysVars[224].data_type_ = ObIntType ;
|
||||
ObSysVars[224].enum_names_ = "[u'MANUAL', u'AUTO']" ;
|
||||
ObSysVars[224].value_ = "0" ;
|
||||
ObSysVars[224].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INFLUENCE_PLAN ;
|
||||
ObSysVars[224].id_ = SYS_VAR_PARALLEL_DEGREE_POLICY ;
|
||||
cur_max_var_id = MAX(cur_max_var_id, static_cast<int64_t>(SYS_VAR_PARALLEL_DEGREE_POLICY)) ;
|
||||
ObSysVarsIdToArrayIdx[SYS_VAR_PARALLEL_DEGREE_POLICY] = 224 ;
|
||||
ObSysVars[224].alias_ = "OB_SV_PARALLEL_DEGREE_POLICY" ;
|
||||
}();
|
||||
|
||||
[&] (){
|
||||
ObSysVars[225].info_ = "limits the degree of parallelism used by the optimizer when automatic degree of parallelism is enabled" ;
|
||||
ObSysVars[225].name_ = "parallel_degree_limit" ;
|
||||
ObSysVars[225].data_type_ = ObUInt64Type ;
|
||||
ObSysVars[225].value_ = "0" ;
|
||||
ObSysVars[225].min_val_ = "0" ;
|
||||
ObSysVars[225].max_val_ = "9223372036854775807" ;
|
||||
ObSysVars[225].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INFLUENCE_PLAN ;
|
||||
ObSysVars[225].id_ = SYS_VAR_PARALLEL_DEGREE_LIMIT ;
|
||||
cur_max_var_id = MAX(cur_max_var_id, static_cast<int64_t>(SYS_VAR_PARALLEL_DEGREE_LIMIT)) ;
|
||||
ObSysVarsIdToArrayIdx[SYS_VAR_PARALLEL_DEGREE_LIMIT] = 225 ;
|
||||
ObSysVars[225].alias_ = "OB_SV_PARALLEL_DEGREE_LIMIT" ;
|
||||
}();
|
||||
|
||||
[&] (){
|
||||
ObSysVars[226].info_ = "specifies the minimum execution time a table scan should have before it's considered for automatic degree of parallelism, variable unit is milliseconds" ;
|
||||
ObSysVars[226].name_ = "parallel_min_scan_time_threshold" ;
|
||||
ObSysVars[226].data_type_ = ObUInt64Type ;
|
||||
ObSysVars[226].value_ = "1000" ;
|
||||
ObSysVars[226].min_val_ = "10" ;
|
||||
ObSysVars[226].max_val_ = "9223372036854775807" ;
|
||||
ObSysVars[226].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INFLUENCE_PLAN ;
|
||||
ObSysVars[226].id_ = SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD ;
|
||||
cur_max_var_id = MAX(cur_max_var_id, static_cast<int64_t>(SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD)) ;
|
||||
ObSysVarsIdToArrayIdx[SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD] = 226 ;
|
||||
ObSysVars[226].alias_ = "OB_SV_PARALLEL_MIN_SCAN_TIME_THRESHOLD" ;
|
||||
}();
|
||||
|
||||
if (cur_max_var_id >= ObSysVarFactory::OB_MAX_SYS_VAR_ID) {
|
||||
HasInvalidSysVar = true;
|
||||
}
|
||||
}
|
||||
}vars_init;
|
||||
|
||||
static int64_t var_amount = 224;
|
||||
static int64_t var_amount = 227;
|
||||
|
||||
int64_t ObSysVariables::get_all_sys_var_count(){ return ObSysVarFactory::ALL_SYS_VARS_COUNT;}
|
||||
ObSysVarClassType ObSysVariables::get_sys_var_id(int64_t i){ return ObSysVars[i].id_;}
|
||||
|
||||
@ -2968,5 +2968,49 @@
|
||||
"info_cn": "用于控制set query的改写行为和计划生成逻辑,保证分支串行执行和结果集顺序",
|
||||
"background_cn": "",
|
||||
"ref_url": ""
|
||||
},
|
||||
"parallel_degree_policy": {
|
||||
"id": 10142,
|
||||
"name": "parallel_degree_policy",
|
||||
"value": "0",
|
||||
"data_type": "enum",
|
||||
"enum_names": [
|
||||
"MANUAL",
|
||||
"AUTO"
|
||||
],
|
||||
"info": "specifies whether automatic degree of parallelism will be enabled",
|
||||
"flags": "GLOBAL | SESSION | INFLUENCE_PLAN",
|
||||
"publish_version": "420",
|
||||
"info_cn": "控制并行度选择策略",
|
||||
"background_cn": "",
|
||||
"ref_url": ""
|
||||
},
|
||||
"parallel_degree_limit": {
|
||||
"id": 10143,
|
||||
"name": "parallel_degree_limit",
|
||||
"value": "0",
|
||||
"data_type": "uint",
|
||||
"info": "limits the degree of parallelism used by the optimizer when automatic degree of parallelism is enabled",
|
||||
"flags": "GLOBAL | SESSION | INFLUENCE_PLAN",
|
||||
"min_val": "0",
|
||||
"max_val": "9223372036854775807",
|
||||
"publish_version": "420",
|
||||
"info_cn": "使用 Auto DOP 策略时, 限制优化器选择并行度上限值",
|
||||
"background_cn": "",
|
||||
"ref_url": ""
|
||||
},
|
||||
"parallel_min_scan_time_threshold": {
|
||||
"id": 10144,
|
||||
"name": "parallel_min_scan_time_threshold",
|
||||
"value": "1000",
|
||||
"data_type": "uint",
|
||||
"info": "specifies the minimum execution time a table scan should have before it's considered for automatic degree of parallelism, variable unit is milliseconds",
|
||||
"flags": "GLOBAL | SESSION | INFLUENCE_PLAN",
|
||||
"min_val": "10",
|
||||
"max_val": "9223372036854775807",
|
||||
"publish_version": "420",
|
||||
"info_cn": "使用 Auto DOP 策略时, 增大基表扫描并行度参考执行时间, 单位 ms",
|
||||
"background_cn": "",
|
||||
"ref_url": ""
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user