Skip to content

Materialize table_types_internal as CTE in sys.all_objects to prevent view inlining#4682

Merged
Deepesh125 merged 1 commit intobabelfish-for-postgresql:BABEL_6_X_DEVfrom
amazon-aurora:jira-babel-6404
Mar 27, 2026
Merged

Materialize table_types_internal as CTE in sys.all_objects to prevent view inlining#4682
Deepesh125 merged 1 commit intobabelfish-for-postgresql:BABEL_6_X_DEVfrom
amazon-aurora:jira-babel-6404

Conversation

@RuchaSK1
Copy link
Copy Markdown
Contributor

@RuchaSK1 RuchaSK1 commented Mar 26, 2026

Description

The sys.all_objects view joins against sys.table_types_internal to exclude table types from the user table branches. Because table_types_internal is a plain view, the planner inlines its definition (a 4-way join across pg_type, pg_namespace, pg_class, pg_depend) and re-executes it per row inside a nested loop, causing significant performance degradation.

This change wraps table_types_internal in a materialized CTE inside sys.all_objects so it is computed once and reused.

We observed following performance improvement:

With enable_mergejoin = on (default):

Query Before Fix After Fix Improvement
SELECT OBJECTPROPERTYEX(286596, 'IsSchemaBound') 10s 1.58s
SELECT COUNT(*) FROM sys.all_objects 6min 33s 1.72s 247×
SELECT OBJECTPROPERTYEX(34290, 'BaseType') 11s 1.56s
Full SSMS view enumeration query 4min 38s 23.49s 12×

With enable_mergejoin = off:

Query Before Fix After Fix Improvement
SELECT OBJECTPROPERTYEX(286596, 'IsSchemaBound') 6min 25s 1.58s 244×
SELECT COUNT(*) FROM sys.all_objects 6min 28s 1.72s 244×
SELECT OBJECTPROPERTYEX(34290, 'BaseType') 6min 28s 1.55s 251×
Full SSMS view enumeration query 3hr 15min 23.9s 452×

Issues Resolved

Task: BABEL-6404

Authored-by: Rucha Kulkarni ruchask@amazon.com
Signed-off-by: Rucha Kulkarni ruchask@amazon.com

Test Scenarios Covered

  • Use case based - Yes

  • Boundary conditions -

  • Arbitrary inputs -

  • Negative test cases -

  • Minor version upgrade tests -

  • Major version upgrade tests -

  • Performance tests -

  • Tooling impact -

  • Client tests -

Check List

  • Commits are signed per the DCO using --signoff

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.

… view inlining

Signed-off-by: Rucha Kulkarni <ruchask@amazon.com>
Copy link
Copy Markdown
Contributor

@KushaalShroff KushaalShroff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Please add perf numbers in description

@Deepesh125 Deepesh125 merged commit b59c594 into babelfish-for-postgresql:BABEL_6_X_DEV Mar 27, 2026
48 checks passed
@Deepesh125 Deepesh125 deleted the jira-babel-6404 branch March 27, 2026 06:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants