diff --git a/dbcon/mysql/ha_mcs_execplan.cpp b/dbcon/mysql/ha_mcs_execplan.cpp index 893df3fd9..11d29a3af 100644 --- a/dbcon/mysql/ha_mcs_execplan.cpp +++ b/dbcon/mysql/ha_mcs_execplan.cpp @@ -7478,7 +7478,7 @@ int cs_get_select_plan(ha_columnstore_select_handler* handler, THD* thd, SCSEP& derivedTableOptimization(&gwi, csep); { - optimizer::RBOptimizerContext ctx(gwi, *thd); + optimizer::RBOptimizerContext ctx(gwi, *thd, csep->traceOn()); bool csepWasOptimized = optimizer::optimizeCSEP(*csep, ctx); if (csep->traceOn() && csepWasOptimized) { diff --git a/dbcon/mysql/rulebased_optimizer.cpp b/dbcon/mysql/rulebased_optimizer.cpp index 731e1a0e0..8acfc6d98 100644 --- a/dbcon/mysql/rulebased_optimizer.cpp +++ b/dbcon/mysql/rulebased_optimizer.cpp @@ -55,11 +55,11 @@ bool optimizeCSEP(execplan::CalpontSelectExecutionPlan& root, optimizer::RBOptim if (get_unstable_optimizer(&ctx.thd)) { - optimizer::Rule parallelCES{"parallelCES", optimizer::parallelCESFilter, optimizer::applyParallelCES}; + optimizer::Rule parallelCES{"parallel_ces", optimizer::parallelCESFilter, optimizer::applyParallelCES}; rules.push_back(parallelCES); } - optimizer::Rule predicatePushdown{"predicatePushdown", optimizer::predicatePushdownFilter, + optimizer::Rule predicatePushdown{"predicate_pushdown", optimizer::predicatePushdownFilter, optimizer::applyPredicatePushdown}; rules.push_back(predicatePushdown); @@ -76,6 +76,10 @@ bool Rule::apply(execplan::CalpontSelectExecutionPlan& root, optimizer::RBOptimi { changedThisRound = walk(root, ctx); hasBeenApplied |= changedThisRound; + if (ctx.logRules) + { + std::cout << "MCS RBO: " << name << " has been applied this round." << std::endl; + } } while (changedThisRound && !applyOnlyOnce); return hasBeenApplied; diff --git a/dbcon/mysql/rulebased_optimizer.h b/dbcon/mysql/rulebased_optimizer.h index 12a1f2c15..a7761c61a 100644 --- a/dbcon/mysql/rulebased_optimizer.h +++ b/dbcon/mysql/rulebased_optimizer.h @@ -32,12 +32,13 @@ namespace optimizer { class RBOptimizerContext { public: RBOptimizerContext() = delete; - RBOptimizerContext(cal_impl_if::gp_walk_info& walk_info, THD& thd) : gwi(walk_info), thd(thd) {} + RBOptimizerContext(cal_impl_if::gp_walk_info& walk_info, THD& thd, bool logRules) : gwi(walk_info), thd(thd), logRules(logRules) {} // gwi lifetime should be longer than optimizer context. // In plugin runtime this is always true. cal_impl_if::gp_walk_info& gwi; THD& thd; uint64_t uniqueId {0}; + bool logRules {false}; }; struct Rule