Mark table_constraints_internal() function as parallel safe and set current_db_id for parallel workers #3322
+6
−3
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.
After the above change, we were getting test failures related to INFORMATION_SCHEMA_TSQL.TABLE_CONSTRAINTS views in Enforced Parallel Query mode. On further investigation, we found that we were communicating the logical database name to parallel workers and setting the
current_db_name
using logical database name (Ref: #2262) but we missed to setcurrent_db_id
which gets used by function like sys.db_id(), sys.db_name() etc. and due to that queries involving join using these function was resulting empty rows.This commit resolves the issue by setting the
current_db_id
along withcurrent_db_name
inset_cur_db_name_for_parallel_worker()
function.Signed-off-by: Sumit Jaiswal [email protected]
Issues Resolved
Task: BABEL-5427
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.