压缩超表中特定列启用范围统计信息跟踪。这会跟踪每个数据块中该列的值范围。用于查询优化期间的数据块剪枝。

最佳实践是在与分区列相关的列上启用范围跟踪。换句话说,在查询的 WHERE 子句中引用的辅助列上启用跟踪。

TimescaleDB 支持 smallintintbigintserialbigserialdatetimestamptimestamptz 数据类型的最小值/最大值范围跟踪。当使用 compress_chunk 函数压缩属于此超表的数据块时,会计算最小值/最大值范围。范围以起始值(包含)和结束值(不包含)的形式存储在 chunk_column_stats 目录表中。

通过这种方式,您可以将此类列的最小值/最大值存储在此目录表中的每个数据块级别。这些最小值/最大值范围不参与数据的分区。当 SQL 查询的 WHERE 子句指定列的范围时,这些范围用于数据块剪枝。

在启用了统计信息跟踪的列上执行 DROP COLUMN 最终会删除目录表中的所有相关条目。

在压缩数据块上调用 decompress_chunk 会重置其在 chunk_column_stats 目录表中的条目,因为它现在可用于 DML,并且最小值/最大值范围可能会因数据块中任何进一步的数据操作而更改。

默认情况下,此功能处于禁用状态。要启用数据块跳过,请在 postgresql.conf 中设置 timescaledb.enable_chunk_skipping = on。当您从使用压缩但不支持数据块跳过的数据实例升级时,您需要重新压缩先前压缩的数据块才能使数据块跳过生效。

在此示例中,您将 conditions 表转换为超表,并在 time 列上进行分区。然后,您指定并启用其他列以跟踪范围。

SELECT create_hypertable('conditions', 'time');
SELECT enable_chunk_skipping('conditions', 'device_id');
名称类型默认值必需描述
column_name文本-要跟踪范围统计信息的列
hypertableREGCLASS-列所属的超表
if_not_exists布尔值false设置为 true,以便在未跟踪列的范围时发送通知。默认情况下,会抛出错误
类型描述
column_stats_id整数TimescaleDB 内部目录中条目的 ID
enabled布尔值当启用跟踪时,if_not_existstrue,且未添加新条目时,返回 true
已添加

关键词

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