Timescale Cloud:性能、扩展、企业级
自托管产品
MST
在大多数情况下,自动压缩策略 足以自动压缩您的分块。但是,如果您希望对压缩有更多控制,也可以手动压缩特定的分块。
在开始之前,您需要一个要压缩的分块列表。在此示例中,您将使用一个名为 example
的超表,并压缩三天前的分块。
在 psql 提示符下,选择表
example
中所有三天前的分块SELECT show_chunks('example', older_than => INTERVAL '3 days');这将返回一个分块列表。记下分块的名称
show_chunks 1 _timescaledb_internal_hyper_1_2_chunk 2 _timescaledb_internal_hyper_1_3_chunk
当您对分块列表满意后,可以使用分块名称手动压缩每个分块。
在 psql 提示符下,压缩分块
SELECT compress_chunk( '<chunk_name>');使用此命令检查压缩结果
SELECT *FROM chunk_compression_stats('example');结果显示给定超表的分块、它们的压缩状态以及其他一些统计信息
chunk_schema chunk_name compression_status before_compression_table_bytes before_compression_index_bytes before_compression_toast_bytes before_compression_total_bytes after_compression_table_bytes after_compression_index_bytes after_compression_toast_bytes after_compression_total_bytes node_name _timescaledb_internal _hyper_1_1_chunk 已压缩 8192 字节 16 KB 8192 字节 32 KB 8192 字节 16 KB 8192 字节 32 KB _timescaledb_internal _hyper_1_20_chunk 未压缩
- 对所有要压缩的分块重复此操作。
或者,您可以使用 show_chunks
命令的输出来选择分块并一次性压缩它们。例如,使用此命令压缩一到三周大且尚未压缩的分块
SELECT compress_chunk(i, if_not_compressed => true)FROM show_chunks('example',now()::timestamp - INTERVAL '1 week',now()::timestamp - INTERVAL '3 weeks') i;
在 Timescale 2.9 及更高版本中,您可以将多个未压缩分块合并到先前压缩的分块中,作为压缩过程的一部分。这使您可以拥有更小的未压缩分块间隔,从而减少未压缩数据占用的磁盘空间。例如,如果您的数据中有多个较小的未压缩分块,则可以将其合并为一个压缩分块。
要将未压缩分块合并到压缩分块中,请更改压缩设置以设置压缩分块时间间隔,并在压缩时运行压缩操作以合并分块。
注意
compress_orderby
的默认设置是 'time DESC'
(降序或 DESC 命令用于将返回的数据按降序排序),这会导致在合并过程中分块被多次重新压缩,可能会导致严重的性能损失。设置 timescaledb.compress_orderby = 'time ASC'
以避免此损失。
ALTER TABLE example SET (timescaledb.compress_chunk_time_interval = '<time_interval>',timescaledb.compress_orderby = 'time ASC');SELECT compress_chunk(c, if_not_compressed => true)FROM show_chunks('example',now()::timestamp - INTERVAL '1 week') c;
您选择的时间间隔必须是未压缩分块间隔的倍数。例如,如果您的未压缩分块间隔是一周,则压缩分块的 <time_interval>
可以是两周或六周,但不能是一个月。
关键词