Conversation
Previously, when segments were merged during compaction, the pages from the source segments were orphaned - they remained allocated but were no longer referenced. This caused index bloat, with roughly 43% of space wasted on the slack-db benchmark (831 MB → 473 MB after fix). Changes: - Add tp_segment_collect_pages() to collect all pages (data + page index) from a segment before merge - Add tp_segment_free_pages() to record freed pages in PostgreSQL's FSM - Call IndexFreeSpaceMapVacuum() after freeing pages so the FSM tree is updated and GetFreeIndexPage() can find them - Modify allocate_segment_page() to check FSM for recycled pages before extending the relation - Add FSM stats tracking for debugging (visible at DEBUG1 level) - Demote spill/merge notices to DEBUG1 to reduce noise during builds Testing: - slack-db benchmark: index size reduced from 831 MB to 473 MB (43%) - Page reuse during build: 45,026 pages reused from FSM - All regression tests pass
tjgreen42
commented
Dec 17, 2025
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.
Summary
Results (internal benchmark, 2.1M slack messages)