Live views
These settings control live view SQL support and the background refresh job that maintains live views incrementally. For a conceptual overview, see Live views.
Live view refresh shares the materialized view refresh worker pool, so the
worker-pool settings under
Materialized views
(mat.view.refresh.worker.count, .affinity, .haltOnError) also govern live
view refresh. There are no dedicated live-view worker-pool properties.
cairo.live.view.checkpoint.compaction.interval
- Default:
0(disabled) - Reloadable: no
Number of checkpoint seals between physical compaction attempts. Compaction
repacks live state pages from sparse data segments so obsolete segments can be
reclaimed. A value of 0 disables compaction.
cairo.live.view.checkpoint.max.duration.micros
- Default:
300000000(5 minutes) - Reloadable: no
Maximum wall-clock interval, in microseconds, between head-checkpoint writes. This caps restart and out-of-order replay work for low-rate views that do not reach the row-count trigger.
cairo.live.view.checkpoint.repair.replay.max.rows
- Default:
1000000 - Reloadable: no
Maximum base rows a localized out-of-order repair replays in one refresh turn. A
larger repair pauses at a timestamp-group boundary and continues in a later turn
without publishing partial output. The refresh-turn duration limit also applies.
A value of 0 or less disables this row budget.
cairo.live.view.checkpoint.repair.scan.max.keys
- Default:
100000 - Reloadable: no
Maximum partition keys inspected while planning a localized ROWS repair. If
planning crosses the limit, QuestDB uses an unlocalized repair instead. A value
of 0 or less disables this key budget.
cairo.live.view.checkpoint.repair.scan.max.rows
- Default:
1000000 - Reloadable: no
Maximum base rows scanned while discovering the bounds of a localized ROWS
repair. This includes rows later discarded by the view's WHERE filter. If the
limit is crossed, QuestDB uses the conservative unlocalized bound. A value of
0 or less disables this scan budget.
cairo.live.view.checkpoint.rows
- Default:
1000000 - Reloadable: no
Number of newly flushed rows after which the refresh worker writes a head checkpoint. Smaller values shorten restart replay at the cost of more checkpoint writes.
cairo.live.view.enabled
- Default:
true - Reloadable: no
Enables or disables SQL support and the refresh job for live views. When
disabled, CREATE LIVE VIEW fails with live views are disabled.
cairo.live.view.flush.retry.max
- Default:
5 - Reloadable: no
Maximum number of consecutive flush attempts before a view is marked invalid. A flush persists the in-memory rows to the view's disk tier.
cairo.live.view.flush.retry.max.duration.micros
- Default:
60000000(60 seconds) - Reloadable: no
Maximum total time, in microseconds, spent retrying a stalled flush before the view is marked invalid.
cairo.live.view.in.memory.buffer.growth.bytes
- Default:
16777216(16 MiB) - Reloadable: no
Fast-path growth budget for the in-memory tier. Once the published buffer's
footprint reaches this size, refresh falls back to a swap that evicts expired
rows and may shrink the buffer instead of continuing to append in place. Raise
it for IN MEMORY windows expected to exceed the default. A value of 0 or
less forces this compaction path on every publish. Accepts a size suffix such as
16M.
cairo.live.view.in.memory.buffer.initial.bytes
- Default:
65536(64 KiB) - Reloadable: no
Initial size of a live view's in-memory tier buffer. Accepts a size suffix such
as 64K.
cairo.live.view.in.memory.max
- Default:
3600000000(60 minutes) - Reloadable: no
Upper bound on the IN MEMORY retention window. A CREATE LIVE VIEW whose
IN MEMORY (or defaulted FLUSH EVERY) exceeds this value is rejected.
cairo.live.view.partition.compact.threshold
- Default:
100000 - Reloadable: no
Anchor-map tombstone threshold that triggers compaction. Compaction also runs when tombstones exceed half of the anchor map, regardless of this absolute threshold.
cairo.live.view.refresh.memory.limit.bytes
- Default:
0(unlimited) - Reloadable: yes
Per-live-view limit on the peak memory used during a refresh cycle. It includes
persistent window state, the IN MEMORY recent-row tier, staging memory, and
transient buffers such as Parquet row-group decode buffers. Exceeding the limit
invalidates the view immediately; recovery requires dropping and recreating it.
Size the limit above the refresh workload's allocation floor. In particular, a
bounded ROWS frame allocates at least one cairo.sql.window.store.page.size
page (1 MiB by default), and a Parquet-backed refresh may decode a complete row
group.
cairo.live.view.refresh.turn.max.commits
- Default:
64 - Reloadable: no
Maximum number of base-table commits a refresh worker processes in a single turn before yielding to other views.
cairo.live.view.refresh.turn.max.duration.micros
- Default:
50000(50 milliseconds) - Reloadable: no
Maximum wall-clock time, in microseconds, a refresh worker spends on one view per turn before yielding.