Skip to content

Commit 375ad58

Browse files
authored
Fix direct-to-shard performance regression (#513)
* Fix direct-to-shard performance regression * better
1 parent a716fa3 commit 375ad58

File tree

1 file changed

+24
-21
lines changed
  • pgdog/src/frontend/router/parser/query

1 file changed

+24
-21
lines changed

pgdog/src/frontend/router/parser/query/select.rs

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -90,29 +90,32 @@ impl QueryParser {
9090
query.set_shard_mut(round_robin::next() % context.shards);
9191
}
9292

93-
if let Some(buffered_query) = context.router_context.query.as_ref() {
94-
let rewrite =
95-
RewriteEngine::new().rewrite_select(buffered_query.query(), query.aggregate());
96-
if !rewrite.plan.is_noop() {
97-
if let BufferedQuery::Prepared(parse) = buffered_query {
93+
// Only rewrite if query is cross-shard.
94+
if query.is_cross_shard() && context.shards > 1 {
95+
if let Some(buffered_query) = context.router_context.query.as_ref() {
96+
let rewrite =
97+
RewriteEngine::new().rewrite_select(buffered_query.query(), query.aggregate());
98+
if !rewrite.plan.is_noop() {
99+
if let BufferedQuery::Prepared(parse) = buffered_query {
100+
let name = parse.name().to_owned();
101+
{
102+
let prepared = context.prepared_statements();
103+
prepared.set_rewrite_plan(&name, rewrite.plan.clone());
104+
prepared.update_query(&name, &rewrite.sql);
105+
}
106+
}
107+
query.set_rewrite(rewrite.plan, rewrite.sql);
108+
} else if let BufferedQuery::Prepared(parse) = buffered_query {
98109
let name = parse.name().to_owned();
99-
{
110+
let stored_plan = {
100111
let prepared = context.prepared_statements();
101-
prepared.set_rewrite_plan(&name, rewrite.plan.clone());
102-
prepared.update_query(&name, &rewrite.sql);
103-
}
104-
}
105-
query.set_rewrite(rewrite.plan, rewrite.sql);
106-
} else if let BufferedQuery::Prepared(parse) = buffered_query {
107-
let name = parse.name().to_owned();
108-
let stored_plan = {
109-
let prepared = context.prepared_statements();
110-
prepared.rewrite_plan(&name)
111-
};
112-
if let Some(plan) = stored_plan {
113-
if !plan.is_noop() {
114-
query.clear_rewrite();
115-
*query.rewrite_plan_mut() = plan;
112+
prepared.rewrite_plan(&name)
113+
};
114+
if let Some(plan) = stored_plan {
115+
if !plan.is_noop() {
116+
query.clear_rewrite();
117+
*query.rewrite_plan_mut() = plan;
118+
}
116119
}
117120
}
118121
}

0 commit comments

Comments
 (0)