[bug]Join order changed when execute with the udf by different parallel hint
This commit is contained in:
@ -499,6 +499,7 @@ enum PXParallelRule
|
||||
MANUAL_TABLE_HINT, // /*+ parallel(t1 3) */
|
||||
SESSION_FORCE_PARALLEL, // alter session force parallel query parallel 3;
|
||||
MANUAL_TABLE_DOP, // create table t1 (...) parallel 3;
|
||||
PL_UDF_DAS_FORCE_SERIALIZE, //stmt has_pl_udf will use das, force serialize;
|
||||
MAX_OPTION
|
||||
};
|
||||
|
||||
@ -513,6 +514,7 @@ inline const char *ob_px_parallel_rule_str(PXParallelRule px_parallel_ruel)
|
||||
"MANUAL_TABLE_HINT",
|
||||
"SESSION_FORCE_PARALLEL",
|
||||
"MANUAL_TABLE_DOP",
|
||||
"PL_UDF_DAS_FORCE_SERIALIZE",
|
||||
"MAX_OPTION",
|
||||
};
|
||||
if (OB_LIKELY(px_parallel_ruel >= NOT_USE_PX)
|
||||
|
||||
@ -30,6 +30,7 @@ namespace sql
|
||||
#define PARALLEL_ENABLED_BY_TABLE_HINT "Degree of Parallelism is %ld because of hint"
|
||||
#define PARALLEL_ENABLED_BY_SESSION "Degree of Parallelism is %ld because of session"
|
||||
#define PARALLEL_ENABLED_BY_TABLE_PROPERTY "Degree of Parallelisim is %ld because of table property"
|
||||
#define PARALLEL_DISABLED_BY_PL_UDF_DAS "Degree of Parallelisim is %ld because stmt contain pl_udf which force das scan"
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -667,6 +667,12 @@ int ObOptimizer::init_env_info(ObDMLStmt &stmt)
|
||||
ctx_.set_parallel_rule(PXParallelRule::USE_PX_DEFAULT);
|
||||
ctx_.set_parallel(ObGlobalHint::DEFAULT_PARALLEL);
|
||||
}
|
||||
//following above rule, but if stmt contain pl_udf, force das, parallel should be 1
|
||||
if (parallel > 1 && ctx_.has_pl_udf()) {
|
||||
ctx_.set_parallel_rule(PXParallelRule::PL_UDF_DAS_FORCE_SERIALIZE);
|
||||
ctx_.set_parallel(1);
|
||||
ctx_.add_plan_note(PARALLEL_DISABLED_BY_PL_UDF_DAS, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// init column usage info
|
||||
|
||||
@ -225,7 +225,8 @@ ObOptimizerContext(ObSQLSessionInfo *session_info,
|
||||
return px_parallel_rule_ == MANUAL_HINT ||
|
||||
px_parallel_rule_ == MANUAL_TABLE_HINT ||
|
||||
px_parallel_rule_ == SESSION_FORCE_PARALLEL ||
|
||||
px_parallel_rule_ == MANUAL_TABLE_DOP;
|
||||
px_parallel_rule_ == MANUAL_TABLE_DOP ||
|
||||
px_parallel_rule_ == PL_UDF_DAS_FORCE_SERIALIZE;
|
||||
}
|
||||
inline bool use_intra_parallel() const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user