QuestDB Enterprise 3.2.3: WAL cleaner, TLS metrics, and HORIZON JOIN
QuestDB Enterprise 3.2.3 is out. This release brings automatic WAL cleanup in object storage, TLS certificate expiration monitoring, faster joins, new SQL functions, and everything from QuestDB 9.3.3.
Highlights
Object store WAL cleaner
The primary node now automatically deletes replicated WAL data from object
storage once it is no longer needed by any replica or backup. The cleaner
consults backup manifests and checkpoint history to compute the oldest safe
deletion boundary, includes rate limiting per cloud provider, and persists
progress for crash recovery. Enabled by default and configurable via
replication.primary.cleaner.*
properties.
TLS certificate expiration metrics
New Prometheus gauge metrics report seconds until the active TLS certificate expires for each TLS-enabled endpoint:
questdb_tls_cert_ttl_seconds_httpquestdb_tls_cert_ttl_seconds_http_minquestdb_tls_cert_ttl_seconds_linequestdb_tls_cert_ttl_seconds_pg
Values update on certificate reload, making it straightforward to set up alerting for upcoming expirations.
Faster ASOF and WINDOW joins
Initial slave frame positioning now uses binary search instead of linearly
scanning all preceding time frames, reducing first-lookup cost from O(N) to
O(log P) where P is the number of partitions. This benefits all ASOF JOIN,
LT JOIN, and WINDOW JOIN queries with large right-hand-side tables.
twap() - time-weighted average price
The new twap(price, timestamp)
aggregate computes time-weighted averages using step-function integration.
Unlike VWAP, which weights by volume, TWAP weights by duration. It supports
parallel GROUP BY and SAMPLE BY with all FILL modes.
array_sort() and array_reverse()
New scalar functions for double arrays of any dimensionality.
array_sort sorts each
innermost-dimension slice independently with optional descending and nulls-first
arguments. array_reverse reverses
each innermost-dimension slice.
For capital markets: HORIZON JOIN and post-trade cookbook
Part of QuestDB 9.3.3 and now available in
Enterprise, HORIZON JOIN is a new join type
built for markout analysis. For each row on the left side, it computes
left_timestamp + offset, performs an ASOF match against the right table, and
aggregates the results. A full day of trades joined against order book snapshots
across multiple time horizons resolves in seconds. No self-joins, no
UNION ALL, one statement.
To make HORIZON JOIN and QuestDB's time-series joins more approachable for
real-world trading workflows, we have added a new
post-trade analysis section
to the cookbook. It covers slippage, markout, implementation shortfall, venue
scoring, and flow toxicity, all with runnable SQL against the demo dataset.
Configurable madvise mode
If you are ingesting into many tables with many columns under memory pressure,
the new cairo.wal.writer.madvise.mode property lets you tune the OS page cache
hint. Values are none (default), sequential, and random. Set to random
to reduce memory pressure in high-column ingestion workloads.
JIT compilation on ARM64
QuestDB's JIT filter compiler now runs natively on ARM64 - Apple Silicon, AWS
Graviton, and other aarch64 systems. Benchmarks show WHERE clause filters
running up to 2x faster with JIT enabled, with OR-predicate filters seeing up
to 5x improvement. No application changes required, but the binary is specific
for ARM. Current enterprise customers who want the ARM binaries should contact
the QuestDB team for assistance.
Includes everything from QuestDB 9.3.3
QuestDB Enterprise 3.2.3 ships with all changes from
QuestDB 9.3.3, including the SQL-standard
WINDOW clause, Parquet late materialization, faster parallel GROUP BY,
UNION/INTERSECT/EXCEPT pushdown, and file-based secrets for Kubernetes.
Read the full QuestDB 9.3.3 blog post for
details on all of these.
Bug fixes and improvements
- Fixed backup restore failure on empty partitions
- Fixed dropped table processing after restore from backup
- Added fallback when file mmap fails on Windows
- Added missing ACL permissions for
ALTER SYMBOL CAPACITY,SET REFRESH LIMIT,SET REFRESH TYPE, andALTER TABLE SET PARAM - Expanded ACL permission system to 256 bits, removing the 64-permission ceiling
- Fixed crash on
LATEST BY ALLqueries over large tables - Fixed crash when Parquet partition statistics are missing
- WAL telemetry now includes
minTimestampandmaxTimestampcolumns
Getting the update
Self-managed enterprise customers will find the binaries at the usual download location. BYOC enterprise customers will be contacted for upgrading.
Not on QuestDB Enterprise yet? Learn more about QuestDB Enterprise and BYOC, or contact the QuestDB team for a conversation or a demo.