Mark table_constraints_internal() function as parallel safe and set current_db_id for parallel workers #3322
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.
Description
The INFORMATION_SCHEMA_TSQL.TABLE_CONSTRAINTS_INTERNAL() function was recently introduced
but not marked as PARALLEL SAFE. This prevented the query optimizer from utilizing parallel
plans in queries involving this function, leading to suboptimal performance for certain operations.
By marking the function as PARALLEL SAFE, we enable the use of parallel query execution plans,
which can significantly improve performance for large datasets.
This commit also addresses the issue of empty result sets in queries joining with sys.db_id()
or sys.db_name() in Enforced Parallel Query mode by setting the current_db_id in addition to
current_db_name for parallel workers.
Signed-off-by: Sumit Jaiswal [email protected]
Issues Resolved
Task: BABEL-5427, BABEL-5504
Root cause for parallel worker issue:
While we were communicating the logical database name to parallel workers and setting the current_db_name using logical database name (Ref: #2262), we failed to set current_db_id. This omission affected functions like sys.db_id() and sys.db_name(), resulting in empty result sets for queries involving these functions in parallel execution contexts.
Performance Testing
Query:
Before : 50187 ms
After: 47285 ms
Check List
By submitting this pull request, I confirm that my contribution is under the terms of the Apache 2.0 and PostgreSQL licenses, and grant any person obtaining a copy of the contribution permission to relicense all or a portion of my contribution to the PostgreSQL License solely to contribute all or a portion of my contribution to the PostgreSQL open source project.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.