Skip to content

perf: make durable-delete flush compaction proportional (data-only + single-pass index rebuild) - #366

Merged
MPCoreDeveloper merged 2 commits into
masterfrom
perf/compaction-fast-durable-delete
Sep 3, 2026
Merged

perf: make durable-delete flush compaction proportional (data-only + single-pass index rebuild)#366
MPCoreDeveloper merged 2 commits into
masterfrom
perf/compaction-fast-durable-delete

Conversation

@MPCoreDeveloper

Copy link
Copy Markdown
Owner

Problem

#365 made Columnar deletes durable by compacting at flush, but it routed through CompactStorage, which compacted the overflow arena (~46s for delete-10k-of-100k on a fixed-width table) and rebuilt PK + every hash index with separate full-file decode passes — DELETE collapsed to ~65 ops/s in the --pk harness.

Fix

  • CompactPendingDeletes is now data-file only: it collects the live PK positions via BTree.InOrderTraversal() (no Select() row materialization), rewrites the .dat via AppendOnlyEngine.CompactTable, and leaves the overflow arena for a later explicit VACUUM/compact. Durability (deleted rows never resurrect after reopen) is preserved.
  • New RebuildAllIndexesFromFile() rebuilds the PK B-tree and every loaded hash index in one decode pass; CompactStorage (explicit compaction) reuses the traversal + single-pass rebuild too.

Measured

Durable-delete flush on 100K-row table after deleting 10K rows: ~46s → ~0.4s.

Tests

Full suite 1656/1656; DeletesPersistAcrossReopen_AfterFlushCompaction (durable delete) stays green.

MPCoreDeveloper added 2 commits September 3, 2026 16:56
…single-pass index rebuild)

The flush-time compaction added for durable Columnar deletes (#365) cost ~46s on a 100K-row table: CompactStorage compacted the overflow arena (46s) and rebuilt PK + each hash index with a separate full-file decode pass. CompactPendingDeletes now rewrites only the data file (CompactTable over the live PK positions) and rebuilds all indexes in ONE decode pass (RebuildAllIndexesFromFile) — the arena is left for a later explicit VACUUM/compact. Measured flush for delete-10k-of-100k: ~46s -> ~0.4s. CompactStorage (explicit compaction) also reuses the traversal + single-pass rebuild.
@sonarqubecloud

sonarqubecloud Bot commented Sep 3, 2026

Copy link
Copy Markdown

@MPCoreDeveloper
MPCoreDeveloper merged commit fcafdfa into master Sep 3, 2026
13 checks passed
@MPCoreDeveloper
MPCoreDeveloper deleted the perf/compaction-fast-durable-delete branch September 3, 2026 15:14
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