Timescale Cloud:性能、扩展、企业级
自托管产品
MST
为**已压缩**超表中的特定列启用范围统计。这会按分片跟踪该列的值范围。用于查询优化期间的分片跳过,且仅适用于在启用分片跳过后创建的分片。
最佳实践是在与分区列相关的列上启用范围跟踪。换句话说,对查询中 `WHERE` 子句引用的辅助列启用跟踪。
TimescaleDB 支持 `smallint`、`int`、`bigint`、`serial`、`bigserial`、`date`、`timestamp` 和 `timestamptz` 数据类型的最小/最大范围跟踪。当使用 compress_chunk 函数压缩属于此超表的分片时,会计算最小/最大范围。该范围以开始(包含)和结束(不包含)的形式存储在 `chunk_column_stats` 目录表中。
通过这种方式,您可以将这些列的最小/最大值存储在此目录表中,粒度为每个分片。这些最小/最大范围值不参与数据分区。当 SQL 查询的 `WHERE` 子句指定列的范围时,这些范围用于分片跳过。
对已启用统计跟踪的列执行 DROP COLUMN 操作将从目录表中删除所有相关条目。
对已压缩分片调用 `decompress_chunk` 会重置 `chunk_column_stats` 目录表中的相关条目,因为它现在可用于 DML,并且分片中的任何进一步数据操作都可能更改最小/最大范围值。
默认情况下,此功能是禁用的。要启用分片跳过,请在 `postgresql.conf` 中设置 `timescaledb.enable_chunk_skipping = on`。当您从使用压缩但不支持分片跳过的数据库实例升级时,需要重新压缩之前已压缩的分片才能使分片跳过生效。
在此示例中,您将创建 `conditions` 超表,并在 `time` 列上进行分区。然后,您将指定并启用额外的列来跟踪范围。
CREATE TABLE conditions (time TIMESTAMPTZ NOT NULL,location TEXT NOT NULL,device TEXT NOT NULL,temperature DOUBLE PRECISION NULL,humidity DOUBLE PRECISION NULL) WITH (tsdb.hypertable,tsdb.partition_column='time');SELECT enable_chunk_skipping('conditions', 'device_id');
如果您是自托管 TimescaleDB v2.19.3 及以下版本,请创建 PostgreSQL 关系表,然后使用 create_hypertable 进行转换。之后,通过调用 ALTER TABLE 启用 Hypercore。
名称 | 类型 | 默认值 | 必需 | 描述 |
---|---|---|---|---|
column_name | TEXT | - | ✔ | 要跟踪范围统计信息的列 |
hypertable | REGCLASS | - | ✔ | 列所属的超表 |
if_not_exists | BOOLEAN | false | ✖ | 设置为 `true`,以便在未跟踪列的范围时发送通知。默认情况下,会抛出错误。 |
列 | 类型 | 描述 |
---|---|---|
column_stats_id | INTEGER | TimescaleDB 内部目录中条目的 ID |
enabled | BOOLEAN | 当跟踪已启用、`if_not_exists` 为 `true` 且未添加新条目时返回 `true`。 |
关键词