Skip to content

Commit 9b6639e

Browse files
authored
feat(optimizer): optimizer trace log (#17746)
* refactor(optimizer): move rule/utils * re-org the tests * feat(optimizer): optimizer trace * merge with main * add enable_optimizer_trace setting * add optimizer trace log summary
1 parent 4f5c8b9 commit 9b6639e

File tree

23 files changed

+414
-24
lines changed

23 files changed

+414
-24
lines changed

Cargo.lock

Lines changed: 3 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ serfig = "0.1.0"
471471
sha1 = "0.10.5"
472472
sha2 = "0.10.8"
473473
simdutf8 = "0.1.4"
474+
similar = "2.7.0"
474475
simple_hll = { version = "0.0.1", features = ["serde_borsh"] }
475476
simsearch = "0.2"
476477
siphasher = "0.3"

src/query/settings/src/settings_default.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,6 +1242,14 @@ impl DefaultSettings {
12421242
scope: SettingScope::Both,
12431243
range: Some(SettingRange::Numeric(0..=1)),
12441244
}),
1245+
("enable_optimizer_trace", DefaultSettingValue {
1246+
value: UserSettingValue::UInt64(0),
1247+
desc: "Enables optimizer trace.",
1248+
mode: SettingMode::Both,
1249+
scope: SettingScope::Both,
1250+
range: Some(SettingRange::Numeric(0..=1)),
1251+
}),
1252+
12451253
]);
12461254

12471255
Ok(Arc::new(DefaultSettings {

src/query/settings/src/settings_getter_setter.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -924,4 +924,8 @@ impl Settings {
924924
pub fn get_enable_use_vacuum2_to_purge_transient_table_data(&self) -> Result<bool> {
925925
Ok(self.try_get_u64("use_vacuum2_to_purge_transient_table_data")? == 1)
926926
}
927+
928+
pub fn get_enable_optimizer_trace(&self) -> Result<bool> {
929+
Ok(self.try_get_u64("enable_optimizer_trace")? == 1)
930+
}
927931
}

src/query/sql/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ regex = { workspace = true }
6767
roaring = { workspace = true }
6868
serde = { workspace = true }
6969
sha2 = { workspace = true }
70+
similar = { workspace = true }
7071
simsearch = { workspace = true }
7172
tokio = { workspace = true }
7273
unicase = { workspace = true }

src/query/sql/src/planner/optimizer/optimizer_api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub trait Optimizer: Send + Sync {
2525
async fn optimize(&mut self, expr: &SExpr) -> Result<SExpr>;
2626

2727
/// Returns a unique identifier for this optimizer.
28-
fn name(&self) -> &'static str;
28+
fn name(&self) -> String;
2929

3030
/// Get the memo if this optimizer maintains one.
3131
/// Default implementation returns None for optimizers that don't use a memo.

src/query/sql/src/planner/optimizer/optimizer_context.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ pub struct OptimizerContext {
4141
// Optimizer state flags
4242
#[educe(Debug(ignore))]
4343
flags: RwLock<HashMap<String, bool>>,
44+
45+
// Enable optimizer tracing
46+
#[educe(Debug(ignore))]
47+
enable_trace: RwLock<bool>,
4448
}
4549

4650
impl OptimizerContext {
@@ -56,6 +60,7 @@ impl OptimizerContext {
5660
sample_executor: RwLock::new(None),
5761
planning_agg_index: RwLock::new(false),
5862
flags: RwLock::new(HashMap::new()),
63+
enable_trace: RwLock::new(false),
5964
})
6065
}
6166

@@ -134,4 +139,13 @@ impl OptimizerContext {
134139
let flags = self.flags.read();
135140
*flags.get(name).unwrap_or(&false)
136141
}
142+
143+
pub fn set_enable_trace(self: &Arc<Self>, enable: bool) -> Arc<Self> {
144+
*self.enable_trace.write() = enable;
145+
self.clone()
146+
}
147+
148+
pub fn get_enable_trace(self: &Arc<Self>) -> bool {
149+
*self.enable_trace.read()
150+
}
137151
}

src/query/sql/src/planner/optimizer/optimizers/cascades/cascade.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,8 @@ impl CascadesOptimizer {
246246

247247
#[async_trait::async_trait]
248248
impl Optimizer for CascadesOptimizer {
249-
fn name(&self) -> &'static str {
250-
"CascadesOptimizer"
249+
fn name(&self) -> String {
250+
"CascadesOptimizer".to_string()
251251
}
252252

253253
async fn optimize(&mut self, s_expr: &SExpr) -> Result<SExpr> {

src/query/sql/src/planner/optimizer/optimizers/hyper_dp/dphyp.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -862,8 +862,8 @@ impl DPhpy {
862862

863863
#[async_trait::async_trait]
864864
impl Optimizer for DPhpy {
865-
fn name(&self) -> &'static str {
866-
"DPhpy"
865+
fn name(&self) -> String {
866+
"DPhpy".to_string()
867867
}
868868

869869
async fn optimize(&mut self, s_expr: &SExpr) -> Result<SExpr> {

src/query/sql/src/planner/optimizer/optimizers/operator/aggregate/normalize_aggregate.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ impl Default for RuleNormalizeAggregateOptimizer {
181181

182182
#[async_trait::async_trait]
183183
impl Optimizer for RuleNormalizeAggregateOptimizer {
184-
fn name(&self) -> &'static str {
185-
"RuleNormalizeAggregateOptimizer"
184+
fn name(&self) -> String {
185+
"RuleNormalizeAggregateOptimizer".to_string()
186186
}
187187

188188
async fn optimize(&mut self, s_expr: &SExpr) -> Result<SExpr> {

0 commit comments

Comments
 (0)