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_nameTEXT-要跟踪范围统计信息的列
hypertableREGCLASS-列所属的超表
if_not_existsBOOLEANfalse设置为 `true`,以便在未跟踪列的范围时发送通知。默认情况下,会抛出错误。
类型描述
column_stats_idINTEGERTimescaleDB 内部目录中条目的 ID
enabledBOOLEAN当跟踪已启用、`if_not_exists` 为 `true` 且未添加新条目时返回 `true`。

关键词

此页面有问题?报告问题 或 在 GitHub 上编辑此页面