This release contains performance improvements and bug fixes since the 2.24.0 release. We recommend that you upgrade at the next available opportunity.
Highlighted features in TimescaleDB v2.25.0
This release features multiple improvements for continuous aggregates on the columnstore:
- Faster refreshes: You can now utilize direct compress during materialized view refreshes, resulting in higher throughput and reduced I/O usage.
- Efficiency: The enablement of delete optimizations significantly lowers system resource requirements.
- Smaller transactions: Adjusted defaults for
buckets_per_batchto 10 reduces transaction sizes, requiring less WAL holding time. - Faster queries: Smarter defaults for
segmentbyandorderbyyield improved query performance and better compression ratio on the columnstore.
Sunsetting announcements
- This release removes the WAL-based invalidation of continuous aggregates. This feature was introduced in 2.22.0 as tech preview to use logical decoding for building the invalidation logs. The feature was designed for high ingest workloads, reducing the write amplification. With the upcoming stream of improvements to continuous aggregates, this feature was deprioritized and removed.
- The old continuous aggregate format, deprecated in version 2.10.0, has been fully removed from TimescaleDB in this release. Users still on the old format should read the migration documentation to migrate to the new format. Users of Tiger Cloud have already been
automatically migrated.
Features
- #8777 Enable direct compress on continuous aggregate refresh using new GUC
timescaledb.enable_direct_compress_on_cagg_refresh - #9031 Change
defaultbuckets_per_batchon continuous aggregate refresh policy to10 - #9032 Add in-memory recompression for unordered chunks
- #9017 Move
bgw_jobtable into schema_timescaledb_catalog - #9033 Add
rebuild_columnstoreprocedure - #9038 Change default configuration for compressed continuous aggregates
- #9042 Enable batch sorted merge on unordered compressed chunks
- #9046 Allow non timescaledb namespace
SEToption for continuous aggregates - #9059 Allow configuring
work_memfor background worker jobs - #9074 Add function to estimate uncompressed size of compressed chunk
- #9085 Don't register timescaledb-tune specific GUCs
- #9088 Add
ColumnarIndexScancustom node - #9090 Support direct batch delete on hypertables with continuous aggregates
- #9094 Enable the columnar pipeline for grouping without aggregation to speed up the queries of the form
select column from table group by column. - #9103 Support
FIRSTandLASTinColumnarIndexScan - #9108 Support multiple aggregates in
ColumnarIndexScan - #9111 Allow recompression with orderby/index changes
- #9113 Use
enable_columnarscanto control columnarscan - #9127 Remove primary dimension constraints from fully covered chunks
- #8710 Add SQL function to fetch continuous aggregate grouping columns
- #9133 Allow pushing down sort into columnar unordered chunks when it is possible
- #8229 Removed
time_bucket_ngfunction - #8859 Remove support for partial continuous aggregate format
- #9022 Remove WAL based invalidation
- #9016 Remove
_timescaledb_debugschema - #9030 Add new chunks to hypertable publication
Bug fixes
- #8706 Fix planning performance regression on Postgres 16 and later on some join
queries. - #8986 Add pathkey replacement for
ColumnarScanPath - #8989 Ensure no XID is assigned during chunk query
- #8990 Fix
EquivalenceClassindex update forRelOptInfo - #9007 Add validation for compression index key limits
- #9024 Recompress some chunks on
VACUUM FULL - #9045 Fix missing UUID check in compression policy
- #9056 Fix split chunk
relfrozenxid - #9058 Fix missing chunk column stats bug
- #9061 Fix update race with background worker jobs
- #9069 Fix applying multikey sort for columnstore when one numeric key is pinned to a Const of different type
- #9102 Support retention policies on UUIDv7-partitioned hypertables
- #9120 Fix for pre Postgres 17, where a
DELETEfrom a partially compressed chunk may miss records ifBitmapHeapScanis being used - #9121 Allow any immutable constant expressions as default values for compressed columns
- #9121 Fix a potential "unexpected column type 'bool'" error for compressed bool columns with missing value
- #9144 Fix handling implicit constraints in
ALTER TABLE - #9155 Fix column generation during compressed chunk insert
- #9129 Fix
time_bucketwith timezone during DST - #9177 Add alias for
bgw_job - #9176 Handle
NULLvalues in continuous aggregate invalidation more gracefully - #9175 Do not remove dimension constraints for OSM chunks
GUCs
enable_columnarindexscan: Enable returning results directly from compression metadata without decompression. This feature is experimental and in development towards a GA release. Not for production environments. Default:falseenable_direct_compress_on_cagg_refresh: Enable experimental support for direct compression during Continuous Aggregate refresh. Default:falseenable_qual_filtering: Filter qualifiers on chunks when complete chunk would be included by filter. Default:true
Thanks
- @t-aistleitner for reporting the planning performance regression on PG16 and later on some join queries.
- @vahnrr for reporting a crash when adding columns and constraints to a hypertable at the same time
- @cracksalad and @eyadmba for reporting a bug with timezone handling in
time_bucket