Skip to content

perf: whole-file resolution for batch DELETE (A1 starter) - #372

Merged
MPCoreDeveloper merged 1 commit into
masterfrom
perf/bulk-delete-index-drop
Sep 3, 2026
Merged

perf: whole-file resolution for batch DELETE (A1 starter)#372
MPCoreDeveloper merged 1 commit into
masterfrom
perf/bulk-delete-index-drop

Conversation

@MPCoreDeveloper

Copy link
Copy Markdown
Owner

Wat deze PR doet

A1-starter — whole-file resolutie voor batch DELETE (fec15c31):
DeleteMultipleKeys leest het plaintext legacy variabele-lengte .dat één keer (guard: ≤32 MB, niet-encrypted, niet fixed-width) en decodeert per target de PK/hash-sleutels uit dat geheugenbuffer via de B1-partiële decoder — i.p.v. één pread-paar per verwijderde rij. Per-rij engine.Read blijft de fallback (grote/encrypted/fixed-width bestanden, onverwachte recordvorm).

Meting (Release, comparative DELETE 10K op ~100K rijen; median van 3)

vóór na
SQL DELETE ~42K ops/s ~53K ops/s (51,1 / 53,5 / 53,2)
Direct DELETE ~57K ops/s ~69K ops/s (62,8 / 69,4 / 81,1)

Validatie

  • Full SharpCoreDB.Tests (Debug) + Release/CI-filter op alle vier de suites: EXIT=0.

Bewuste vervolgstappen (nog open, zie docs/performance/EXECUTION_PLAN_UPDATE_DELETE.md)

  1. Commit-marker range-batching: markers schrijven zonder per-offset pread (D2: ~50 ms/10K → enkele ms).
  2. Batch-PK stale/lazy-rebuild na grote delete-batches (pakt de per-rij Index.Delete + maakt per-rij read overbodig; vereist PK-index-refresh-infra — Index is nu een plain property zonder lazy rebuild).
  3. Fase B (structureel): fixed-width in-place + PageBased als OLTP-default — de weg naar ~1,2-1,5× van SQLite op UPDATE/DELETE.

DeleteMultipleKeys now reads the whole plaintext legacy variable-length data file ONCE (guarded to <=32MB, non-encrypted, non-fixed-width) and decodes each target's PK/hash keys from that buffer via the B1 partial decoder, instead of issuing one pread pair per deleted row. Per-row engine.Read remains the fallback whenever the guard does not apply or a record is unexpectedly shaped.

Measured (Release, comparative DELETE 10K of ~100K rows, median of 3): SQL ~42K -> ~53K ops/s, Direct ~57K -> ~69K ops/s (single run up to 81K).
@sonarqubecloud

sonarqubecloud Bot commented Sep 3, 2026

Copy link
Copy Markdown

@MPCoreDeveloper
MPCoreDeveloper merged commit d31e4be into master Sep 3, 2026
13 checks passed
@MPCoreDeveloper
MPCoreDeveloper deleted the perf/bulk-delete-index-drop branch September 3, 2026 20:13
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