QuestDB 8.2.2 - New real-time monitoring, Table TTL and more

QuestDB is the world's fast growing time-series database. It offers premium ingestion throughput, enhanced SQL analytics that can power through analysis, and cost-saving hardware efficiency. It's open source and integrates with many tools and languages.

2025 is a fresh new year. There's a renewed sense of optimism, and we're pleased to ride that wave into our latest release. QuestDB had a massively successful year in 2024, being the only time-series database to show significant growth in global DB-Engines ranking. And we're just getting started.

But enough about that, you're here for the goods!

For itemized patch notes, see our release notes page.

Real-time QuestDB monitoring

How you monitor QuestDB is your choice. To provide our community with a strong out-of-the-box option, we've added a new monitoring dashboard to the Web Console. To access it, click the new Add metrics icon above the table view:

Web Console monitoring dashboard
Click the Add Metrics icon above the table view

The dashboard can be tailored to show you what you want to track. All data is shown in real-time from internal telemetric data. Now, no third-party service is required to monitor your QuestDB instance. Customize the timezone, time-frame and refresh rate to your liking:

Web Console monitoring dashboard
Click to zoom

Parallelized Parquet queries

Parquet file reading received a nice boost. The read_parquet() SQL function now supports parallel execution, leveraging QuestDB's query engine to process Parquet files with the same parallel filtering and aggregation capabilities as native tables:

Parallel Parquet query exampleDemo this query
EXPLAIN SELECT
symbol,
max(price)
FROM read_parquet('trades.parquet');

Parquet queries will now take full advantage of multiple CPU cores, improving performance for large datasets. The parallelization is particularly effective for:

  • Complex filtering operations
  • Aggregations across large datasets
  • Group by operations

If you need to disable parallel execution for any reason, you can do so via the cairo.sql.parallel.read.parquet.enabled configuration property:

server.conf
cairo.sql.parallel.read.parquet.enabled=false

New SQL syntax

Headlining this release is a great new tool to manage historical data, and new SQL syntax to help you write performant and concise queries.

Time-to-Live (TTL) for tables

Managing historical data can become a pain-point. Table TTL lets you set an expiration time for your data, automatically removing old partitions as new data arrives. Ideal for maintaining rolling windows of recent data without manual cleanup:

Create a table with TTL
-- Keep only the last 7 days of data
CREATE TABLE metrics (
ts TIMESTAMP,
sensor_id SYMBOL,
value DOUBLE
) timestamp(ts)
PARTITION BY DAY
TTL 7d;
-- Or add TTL to existing tables
ALTER TABLE metrics TTL 7d;

QuestDB handles the cleanup automatically as part of regular operations, dropping entire partitions when they fall outside your TTL window. This makes it incredibly efficient for managing large-scale time-series data.

Read the docs

DECLARE

Ever find yourself repeating the same values across a complex query? The new DECLARE keyword lets you define variables once and use them throughout your SQL. It's handy for date ranges, sampling periods, and frequently used values:

DECLARE exampleDemo this query
DECLARE
@period := 1h,
@symbol := 'BTC-USD',
@window := today()
SELECT
timestamp,
symbol,
avg(price) as avg_price
FROM trades
WHERE symbol = @symbol
AND timestamp IN @window
SAMPLE BY @period;

Read the docs

New window functions

QuestDB 8.2.2 introduces several new window functions. Whether you're new to them or a seasoned pro, our documentation will help you get started.

Lead

The lead() function accesses data from subsequent rows in your result set. This is particularly useful for comparing current values with future values.

Lead exampleDemo this query
SELECT
timestamp,
price,
future_price,
future_price - price AS momentum
FROM (
SELECT
timestamp,
price,
LEAD(price, 10) OVER (ORDER BY timestamp) AS future_price
FROM (
SELECT
timestamp,
avg(price) AS price
FROM trades
WHERE timestamp BETWEEN now() AND dateadd('d', -1, now())
AND symbol = 'BTC-USD'
SAMPLE BY 10m
)
)

Read the docs

Lag

The lag() function accesses data from previous rows, perfect for comparing current values with historical ones.

Lag exampleDemo this query
SELECT
timestamp,
price,
lag(price) OVER (
PARTITION BY symbol
ORDER BY timestamp
) as previous_price
FROM trades;
LIMIT 20;

Read the docs

Last value (not null?)

Returns the last value in a window frame, with support for NULL handling through IGNORE NULLS.

Last value exampleDemo this query
SELECT
timestamp,
symbol,
price,
last_value(price) OVER (
PARTITION BY symbol
ORDER BY timestamp
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
) as last_price
FROM trades;
LIMIT 20;

Read the docs

First value (not null?)

Returns the first value in a window frame, with support for NULL handling through IGNORE NULLS.

First value exampleDemo this query
SELECT
timestamp,
symbol,
price,
first_value(price) OVER (
PARTITION BY symbol
ORDER BY timestamp
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
) as first_price
FROM trades;
LIMIT 20;

Read the docs

New functions

Like most releases, we've added new sugar to help you write performant SQL.

Timezone aware dateadd()

The dateadd() function now supports timezone awareness, making it easier to perform date arithmetic across different timezones. This is particularly useful when working with global time-series data.

Timezone aware dateadd exampleDemo this query
SELECT
timestamp,
dateadd('h', 1, timestamp, 'PST') as one_hour_later_pst,
dateadd('h', 1, timestamp, 'EST') as one_hour_later_est
FROM trades;
LIMIT 20;

Read the docs

Reloadable settings

Downtime is (usually) never helpful. To keep QuestDB up and humming, we've added reloadable configurations. You can now reload certain settings without restarting QuestDB. To do so, update your server.conf file and use the new reload_config() function:

SELECT reload_config();

The server will confirm successful changes in the logs, and you can check which settings are reloadable:

(SHOW PARAMETERS) WHERE reloadable = true;

The configuration documentation also has a new column to indicate whether or not a setting can be reloaded on the fly.

Read the docs

Query tracing

Ever wonder which queries are slowing down your system? Query tracing lets you diagnose performance issues by recording execution times in a system table. Enable it with a simple configuration:

server.conf
query.tracing.enabled=true

Once enabled, QuestDB records query execution data in the _query_trace table. You can analyze this data using regular SQL to identify slow queries:

Find queries taking over 100ms
SELECT
ts,
query_text,
execution_micros / 1000.0 as execution_ms
FROM _query_trace
WHERE execution_micros > 100_000
ORDER BY execution_micros DESC;

The system automatically maintains this table, dropping data older than 24 hours to keep storage usage in check. And like other configuration changes, you can enable tracing without a restart using reload_config().

Read the docs

We're now questdb.com

While it doesn't impact the core database or this version, we'd like to let you know that we've updated our primary domain to questdb.com. This is a permanent change, and we've updated all our links and references to the new domain.

Why? First, because we've heard some uncertainty around the .io domain. And second, the new .com is more familiar and professional, with that little extra panache that reminds us of the good ol' days.

Summary

QuestDB 8.2.2 is a solid release - upgrade to get the latest. The Web Console's new built-in monitoring dashboard gives you instant visibility into your system's performance, while Table TTL simplifies data lifecycle management. Parallelized Parquet reads give a solid performance boost, and set the table for deeper Parquet improvements.

We've also expanded our analytics capabilities with new window functions, made query writing more elegant with DECLARE, and improved timezone handling with enhanced date functions. With the new reloadable settings function, you can even tweak your server configuration without restarting your instances. The new query tracing feature helps you identify performance bottlenecks by tracking query execution times.

As usual, along with a run of new features, QuestDB 8.2.2 brings a battery of bug fixes and performance improvements. Download QuestDB 8.2.2 and let us know what you think within our Community Forum or our public Slack.

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