Skip to content

Add matched GIN baseline for sustained writes and count queries - #25

Merged
bweis merged 4 commits into
mainfrom
bench/gin-mutation-baseline
Sep 19, 2026
Merged

bweis merged 4 commits into
mainfrom
bench/gin-mutation-baseline

Conversation

@bweis

@bweis bweis commented Sep 19, 2026

Copy link
Copy Markdown
Contributor

Add a sustained mutation/count profile shared by Stannum and PostgreSQL GIN, with explicit fastupdate-on/off variants. All use the live-row writer protocol from #24 and independent exact membership checks. Ranking is excluded because PostgreSQL native ranking and BM25 differ.

The private-cluster campaign alternates engine order and records pending-list pages/tuples, reader/writer scheduling lag, affected rows, repeated maintenance, physical size and traffic-versus-drain WAL. Cross-engine guards reject mismatched workload/server settings. This baseline uses an expression GIN index and forced index access, not a stored tsvector or unrestricted planner configuration.

Validation: 94 benchmark tests, six attribution-tool tests, and the 162-file source-header check pass. All 18 local windows passed exact membership and row accounting: 12 synthetic windows plus six 90-second windows on the verified 100k Wikipedia corpus. Stannum passed post-cleanup deep verification. Two synthetic pair comparisons were excluded by the strict harness-hash guard; this is documented, and the campaign now rejects source edits between windows.

On Wikipedia, all engines delivered about 198 actual mutations/sec. Stannum delivered about 20 count queries/sec while both expression-GIN variants were read-overloaded at about 3.5/sec. Stannum's search index was about three times larger. These are expression-GIN, forced-index results; stored tsvector and normal-planner baselines are the next comparison, not a universal speedup claim. Full report: docs/benchmarks/gin-mutation-results.md; compact measurements: gin-baseline-results.json.

CI also exposed an existing VACUUM RSS-sampling startup race. A delayed-ps native reproduction failed before the readiness handshake and passed after it. Baseline RSS and in-flight samples are now reported separately; absent in-flight samples do not masquerade as peak memory. Latest CI is pending.

#23 and #24 are merged; this PR is now based on main. No runtime index code changed.

@bweis
bweis added this pull request to stack #22 September 19, 2026 07:29
@bweis
bweis force-pushed the bench/gin-mutation-baseline branch from 583ef38 to 796bb7a Compare September 19, 2026 07:30
@bweis
bweis removed this pull request from stack #22 September 19, 2026 07:30
@bweis
bweis added this pull request to stack #26 September 19, 2026 07:30
@bweis
bweis force-pushed the bench/gin-mutation-baseline branch from b27cb08 to e4c9693 Compare September 19, 2026 07:38
Base automatically changed from bench/mutation-targets to main September 19, 2026 07:47
@bweis
bweis force-pushed the bench/gin-mutation-baseline branch from e4c9693 to a1eba59 Compare September 19, 2026 07:47
@bweis
bweis marked this pull request as ready for review September 19, 2026 07:50
@bweis
bweis merged commit e163585 into main Sep 19, 2026
16 checks passed
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.

1 participant