Skip to content

v0.6.0

Choose a tag to compare

@danReynolds danReynolds released this 18 Jun 15:12
92bb2b2

Performance and observability release. No breaking changes, and no changes to the
public export surface — safe to upgrade from 0.5.x.

Wins at a glance: up to ~30% faster concurrent writes on top of 0.5.0's
pipelining, a new diagnostics counter for native read-buffer memory, and automatic
reclaim of that memory after large-selectBytes bursts — bounding the RSS trade-off
0.5.0 introduced with native-view transfer.

  • New API: Diagnostics.readerJsonBufHighWaterBytes — the summed capacity of
    every reader isolate's native json_buf, making the read-buffer high-water mark
    directly observable. Surfaces workloads that pin large native buffers after big
    selectBytes reads (#183,
    exp 183).
  • Behavior change: a buffered group of execute() calls that races
    Database.close() is now atomic — every call in the group either flushes or is
    rejected, never the old lock-order-dependent partial outcome. It still never hangs,
    and per-call success/failure semantics are unchanged (#184,
    exp 180).
  • Memory: native read buffers that grow to serve a large selectBytes read now
    reclaim back to their initial capacity on the next small read, once a reader's
    json_buf exceeds 1 MB. A one-off concurrent burst of large reads (e.g. 8 × 8 MB)
    previously pinned tens of MB for the connection's lifetime; that high-water now
    settles back to ~64 KB. Warm large-read workloads keep their capacity (a 256 KB
    last-read guard prevents shrink-then-regrow churn) (#183,
    exp 183).
  • Performance. See the interactive benchmark dashboard
    for current cross-library numbers.
    • Cross-call write batching (group commit) — standalone execute() calls that
      pile up while a write is in flight now coalesce into a single cross-isolate
      request (each statement still its own autocommit), collapsing a concurrent
      burst's per-write round-trips toward two. −26% to −32% on the concurrent
      single-insert lane, on top of 0.5.0's pipelining; isolated and sequential writes
      are unaffected (#184,
      exp 180).

Companion compatibility releases: resqlite_vector 0.1.2, resqlite_js 0.1.2 (both require resqlite: ^0.6.0).

Perf validation (v0.5.0 → 0.6.0) and the full rejected-experiment list are in #187.