# v0.43.0 — Performance Tunability, Diagnostics, Refresh Intelligence & Delta Engine Refactor > **Full technical details:** [v0.43.0.md-full.md](v0.43.0.md-full.md) **Status: Planned** | **Scope: Large** > Promote hardcoded deep-join and WAL thresholds to GUCs, improve GROUP_RESCAN > performance for mutable aggregate arguments, add configurable cost-cache > capacity, implement `explain_stream_table()` diagnostics, expose WAL CDC > per-source status, add mandatory microbenchmarks in CI, and replace the > wide-model change buffer with a native D+I decomposition schema. --- ## What is this? The assessment found performance cliffs behind hardcoded thresholds that users cannot tune, GROUP_RESCAN paths that lose O(delta) advantage for large groups, fixed WAL batch sizes that cannot adapt to workload, and missing diagnostic output explaining why a stream table chose a fallback strategy. v0.43.0 turns these cliffs into tunable, observable, and benchmarked behavior. --- ## Deep-join and Part 3 thresholds as GUCs Deep join behavior is governed by `PART3_MAX_SCAN_COUNT` and `DEEP_JOIN_L0_SCAN_THRESHOLD` — hardcoded constants that can flip workloads from fast differential execution to massive rescans. v0.43.0 promotes these to documented GUCs with sane defaults and emits diagnostics when a query crosses thresholds. --- ## GROUP_RESCAN improvement Fallbacks for `SUM(CASE)`, MIN/MAX-like aggregates, and FULL JOIN aggregate combinations can require rescanning affected groups. v0.43.0 implements the DI-2-style old/new UPDATE split for mutable aggregate arguments, reducing full-group rescans to targeted delta processing. --- ## WAL CDC tunability and diagnostics WAL poll batch size and transition lag tolerance are constants. v0.43.0 exposes them as GUCs and adds metrics for poll duration, rows decoded, lag bytes, and fallback reason. Per-source WAL status includes `blocked_reason`, slot lag, publication state, and last decoder error. --- ## `explain_stream_table()` diagnostics Users cannot tell whether a slow refresh is expected, a regression, or a query design issue. v0.43.0 adds `pgtrickle.explain_stream_table(name)` that reports the chosen DVM plan, fallback reasons, thresholds crossed, estimated complexity, and suggested tuning actions. --- ## D+I change buffer schema refactor (breaking) The change buffer (`pgtrickle_changes.changes_`) currently mirrors every source column twice (`new_col` / `old_col`) and stores UPDATE as a single wide row. The DVM scan operator then decomposes UPDATE into DELETE+INSERT at read time via a 600-line, 5-CTE UNION ALL pipeline. v0.43.0 replaces this with the native D+I storage model: the CDC trigger emits `action='D'` (OLD values) and `action='I'` (NEW values) as separate rows, and the delta scan collapses to a single query with no UNION ALL or column-prefix aliasing. CB table width halves for all source tables. The `changed_cols` WB-1 bitmask is retained at read time: both the D-row and I-row of an UPDATE pair carry the same VARBIT, with `NULL` reserved for genuine INSERT or DELETE rows. This keeps the CB table fully decoupled from downstream view column selections. This is a breaking schema migration — all existing change buffers are rebuilt and all CDC triggers are regenerated during upgrade. See issue [#728](https://github.com/grove/pg-trickle/issues/728) and discussion [#726](https://github.com/grove/pg-trickle/discussions/726). --- ## Also in v0.43.0 - Cost-cache capacity configurable at preload time with hit/miss/collision metrics - Pool-vs-spawn benchmark comparison in CI and docs - Write-amplification benchmarks for UPDATE-heavy and keyless workloads - Mandatory microbenchmarks for join codegen, placeholder resolution, and DAG rebuild --- ## Scope v0.43.0 is a large release because it touches GUC infrastructure, DVM operator logic, WAL decoder, diagnostics API, shared memory, CI benchmarks, and documentation. The unifying theme is turning invisible performance behavior into visible, tunable, and measured operations. > **Source:** [plans/PLAN_OVERALL_ASSESSMENT_9.md](../plans/PLAN_OVERALL_ASSESSMENT_9.md) > findings PERF-01 through PERF-07, FEAT-04, FEAT-05, CI-04. --- *Previous: [v0.42.0 — Test Quality, Aggregate Correctness & Fuzz Automation](v0.42.0.md)* *Next: [v0.44.0 — Security Hardening & Code Quality](v0.44.0.md)* > **Breaking change note:** The D+I change buffer refactor (A44-10) requires an > explicit upgrade step — change buffers are rebuilt and CDC triggers are > regenerated. Treat this as a major version boundary for any deployment that > uses direct SQL queries against `pgtrickle_changes.*`.