New: QuestDB Agent Skills

Try it out

QuestDB Enterprise 3.2.3: WAL cleaner, TLS metrics, and HORIZON JOIN

QuestDB is the open-source time-series database for demanding workloads—from trading floors to mission control. It delivers ultra-low latency, high ingestion throughput, and a multi-tier storage engine. Native support for Parquet and SQL keeps your data portable, AI-ready—no vendor lock-in.

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_http
  • questdb_tls_cert_ttl_seconds_http_min
  • questdb_tls_cert_ttl_seconds_line
  • questdb_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, and ALTER TABLE SET PARAM
  • Expanded ACL permission system to 256 bits, removing the 64-permission ceiling
  • Fixed crash on LATEST BY ALL queries over large tables
  • Fixed crash when Parquet partition statistics are missing
  • WAL telemetry now includes minTimestamp and maxTimestamp columns

Read the full release notes


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.

Subscribe to our newsletters for the latest. Secure and never shared or sold.