Don't try to use Orca for queries that it doesn't support#279
Draft
andr-sokolov wants to merge 5 commits into
Draft
Don't try to use Orca for queries that it doesn't support#279andr-sokolov wants to merge 5 commits into
andr-sokolov wants to merge 5 commits into
Conversation
Contributor
|
+1, Also we could use PG optimizer for insert values queries |
ab23e5e to
0f36433
Compare
Contributor
|
I think this patch looks promising. I rebased the patch and also propose to switch off Orca to prepare query plan (last commit). |
4004908 to
d79324e
Compare
d79324e to
8e59ffd
Compare
ce2eba0 to
18c9a37
Compare
On translating to DXL we can find out that the query is unsupported. The better time to make this decision is analyse stage, because in this case we can run Postgres planner without trying to run Orca and, as a consequence, significantly reduce planning time. Orca doesn't support gp_dist_random, queries on master-only tables, and function exec locations except for any. It's easy to detect on analyse stage, that a query contains these unsupported query properties. The number of unsupported query properties to check before translating to DXL will be increased later.
Orca doesn't support LATERAL, so a query using it is handed to Orca only to fail during DXL translation and fall back to the Postgres planner. As with the other unsupported properties detected at parse analysis in the previous commit, recognize LATERAL there as well and set usePostgresPlanner, so the Postgres planner runs directly without the wasted Orca attempt.
The master-only detection fires on a NULL distribution policy, which views have too, so every query over a view was needlessly pushed onto the Postgres planner. That path keeps the view's range table entry for permission checks, which made pgaudit emit an extra OBJECT record for the view. A view is expanded into its base relations before planning, so Orca never scans the view itself. Exclude views (RELKIND_VIEW) from the check.
usePostgresPlanner was added to Query but never registered in the node support functions, so copyObject() on a Query silently dropped it. EXPLAIN copies the query before planning, so an EXPLAIN of a query that set the lost it and was still handed to Orca - which then failed and fell back, defeating the optimization.
553200f to
66f9bf1
Compare
168b537 to
dd1f6e0
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Don't try to use Orca for queries that it doesn't support
On translating to DXL we can find out that the query is unsupported. The better
time to make this decision is analyse stage, because in this case we can run
Postgres planner without trying to run Orca and, as a consequence, significantly
reduce planning time.
Orca doesn't support gp_dist_random, queries on master-only tables, and function
exec locations except for any. It's easy to detect on analyse stage, that
a query contains these unsupported query properties.
The number of unsupported query properties to check before translating to DXL
will be increased later.
Before the patch
After the patch
Don't plan simple inserts using Orca