
TimescaleDB 是一款开源的时序数据库,构建于 PostgreSQL 之上,以扩展插件的形式集成,致力于让 SQL 在处理时间序列数据时具备更强的可扩展性。它支持基于时间与空间维度的自动分区,并完整兼容 SQL 查询能力。
最新发布的 TimescaleDB 2.22.0 版本带来了自 2.21.3 以来的一系列性能优化与缺陷修复,主要更新包括:
- 现在可以通过
ALTER TABLE
命令对启用了压缩的超表(hypertable)上的稀疏索引进行显式配置,不再依赖系统内部的自动判断机制。用户可根据实际查询负载,在多个字段上创建索引以提升性能。 - [技术预览] 连续聚合功能新增
timescaledb.invalidate_using
配置选项,支持通过超表上的触发器或利用逻辑解码从 WAL 直接捕获失效数据。若未手动设置,系统将沿用超表的失效策略。 - 已实现对 UUIDv7 的压缩和向量化处理支持。压缩机制会提取 UUIDv7 中的时间戳部分,采用 delta-delta 编码方式压缩,随机部分则单独存储。同时,向量化的等值/范围过滤器支持批量解压,使相关查询性能提升约 2 倍。该功能默认关闭(通过
timescaledb.enable_uuid_compression
控制),以便于版本回退,预计在下一个次版本中默认启用。 - 超表(Hypertables)现在可基于 UUIDv7 列进行分区,并利用其内嵌的时间信息实现时间分片。此外,新增多个辅助函数以简化 UUIDv7 的使用,例如生成 UUIDv7 值或提取其中的时间戳,如
uuid_timestamp()
函数可从 UUIDv7 中解析出 PostgreSQL 时间戳格式。 - SkipScan 查询优化现已支持多列索引中的非空(not-null)模式,显著提升涉及多个键的去重(distinct)和有序查询效率。
移除 hypercore 表访问方法
此前在 2.21.0 版本中标记为废弃的 hypercore 表访问方法(TAM)本次正式移除。该功能属于实验性质,实际表现未达预期性能目标。因此,升级至 2.22.0 或更高版本前,若仍在使用 TAM,则必须先迁移。
迁移脚本如下:
do $$declare relid regclass;begin for relid in select cl.oid from pg_class cl join pg_am am on (am.oid = cl.relam) where am.amname = 'hypercore' loop raise notice 'converting % to heap', relid::regclass; execute format('alter table %s set access method heap', relid); end loop;end$$;
查看更多更新内容,请访问:https://www.php.cn/link/6abdec2606bd68762a72dc1a4038d1ff
源码下载地址:点击获取










