[FEAT MERGE] implement dynamic sampling

This commit is contained in:
wangt1xiuyi
2023-04-27 12:15:28 +00:00
committed by ob-robot
parent 56f85c9c76
commit f745b47cbc
86 changed files with 6754 additions and 2282 deletions

View File

@ -248,6 +248,7 @@ enum ObSysVarClassType
SYS_VAR_PARALLEL_DEGREE_POLICY = 10142,
SYS_VAR_PARALLEL_DEGREE_LIMIT = 10143,
SYS_VAR_PARALLEL_MIN_SCAN_TIME_THRESHOLD = 10144,
SYS_VAR_OPTIMIZER_DYNAMIC_SAMPLING = 10145,
};
}

View File

@ -243,6 +243,7 @@ namespace share
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";
static const char* const OB_SV_OPTIMIZER_DYNAMIC_SAMPLING = "optimizer_dynamic_sampling";
}
}

View File

@ -278,6 +278,7 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = {
"ob_trx_lock_timeout",
"ob_trx_timeout",
"optimizer_capture_sql_plan_baselines",
"optimizer_dynamic_sampling",
"optimizer_use_sql_plan_baselines",
"parallel_degree_limit",
"parallel_degree_policy",
@ -508,6 +509,7 @@ const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = {
SYS_VAR_OB_TRX_LOCK_TIMEOUT,
SYS_VAR_OB_TRX_TIMEOUT,
SYS_VAR_OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES,
SYS_VAR_OPTIMIZER_DYNAMIC_SAMPLING,
SYS_VAR_OPTIMIZER_USE_SQL_PLAN_BASELINES,
SYS_VAR_PARALLEL_DEGREE_LIMIT,
SYS_VAR_PARALLEL_DEGREE_POLICY,
@ -809,7 +811,8 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_ID[] = {
"_force_order_preserve_set",
"parallel_degree_policy",
"parallel_degree_limit",
"parallel_min_scan_time_threshold"
"parallel_min_scan_time_threshold",
"optimizer_dynamic_sampling"
};
bool ObSysVarFactory::sys_var_name_case_cmp(const char *name1, const ObString &name2)
@ -1204,6 +1207,7 @@ int ObSysVarFactory::create_all_sys_vars()
+ sizeof(ObSysVarParallelDegreePolicy)
+ sizeof(ObSysVarParallelDegreeLimit)
+ sizeof(ObSysVarParallelMinScanTimeThreshold)
+ sizeof(ObSysVarOptimizerDynamicSampling)
;
void *ptr = NULL;
if (OB_ISNULL(ptr = allocator_.alloc(total_mem_size))) {
@ -3255,6 +3259,15 @@ int ObSysVarFactory::create_all_sys_vars()
ptr = (void *)((char *)ptr + sizeof(ObSysVarParallelMinScanTimeThreshold));
}
}
if (OB_SUCC(ret)) {
if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarOptimizerDynamicSampling())) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("fail to new ObSysVarOptimizerDynamicSampling", K(ret));
} else {
store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast<int64_t>(SYS_VAR_OPTIMIZER_DYNAMIC_SAMPLING))] = sys_var_ptr;
ptr = (void *)((char *)ptr + sizeof(ObSysVarOptimizerDynamicSampling));
}
}
}
return ret;
@ -5778,6 +5791,17 @@ int ObSysVarFactory::create_sys_var(ObSysVarClassType sys_var_id, ObBasicSysVar
}
break;
}
case SYS_VAR_OPTIMIZER_DYNAMIC_SAMPLING: {
void *ptr = NULL;
if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarOptimizerDynamicSampling)))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarOptimizerDynamicSampling)));
} else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarOptimizerDynamicSampling())) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("fail to new ObSysVarOptimizerDynamicSampling", K(ret));
}
break;
}
default: {
ret = OB_ERR_UNEXPECTED;

View File

@ -1642,6 +1642,13 @@ public:
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 ObSysVarOptimizerDynamicSampling : public ObIntSysVar
{
public:
ObSysVarOptimizerDynamicSampling() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {}
inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_DYNAMIC_SAMPLING; }
inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(227); }
};
class ObSysVarFactory
@ -1661,7 +1668,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 = 130;
const static int64_t OB_SYS_VARS_COUNT = 131;
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;

View File

@ -2980,13 +2980,27 @@ static struct VarsInit{
ObSysVars[226].alias_ = "OB_SV_PARALLEL_MIN_SCAN_TIME_THRESHOLD" ;
}();
[&] (){
ObSysVars[227].info_ = "control optimizer dynamic sample level" ;
ObSysVars[227].name_ = "optimizer_dynamic_sampling" ;
ObSysVars[227].data_type_ = ObUInt64Type ;
ObSysVars[227].value_ = "1" ;
ObSysVars[227].min_val_ = "0" ;
ObSysVars[227].max_val_ = "1" ;
ObSysVars[227].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE ;
ObSysVars[227].id_ = SYS_VAR_OPTIMIZER_DYNAMIC_SAMPLING ;
cur_max_var_id = MAX(cur_max_var_id, static_cast<int64_t>(SYS_VAR_OPTIMIZER_DYNAMIC_SAMPLING)) ;
ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_DYNAMIC_SAMPLING] = 227 ;
ObSysVars[227].alias_ = "OB_SV_OPTIMIZER_DYNAMIC_SAMPLING" ;
}();
if (cur_max_var_id >= ObSysVarFactory::OB_MAX_SYS_VAR_ID) {
HasInvalidSysVar = true;
}
}
}vars_init;
static int64_t var_amount = 227;
static int64_t var_amount = 228;
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_;}

View File

@ -3012,5 +3012,19 @@
"info_cn": "使用 Auto DOP 策略时, 增大基表扫描并行度参考执行时间, 单位 ms",
"background_cn": "",
"ref_url": ""
},
"optimizer_dynamic_sampling": {
"id": 10145,
"name": "optimizer_dynamic_sampling",
"value": "1",
"data_type": "uint",
"min_val": "0",
"max_val": "1",
"info": "control optimizer dynamic sample level",
"flags": "GLOBAL | SESSION | NEED_SERIALIZE",
"publish_version": "420",
"info_cn": "",
"background_cn": "",
"ref_url": "?singleDoc#"
}
}