Timescale Cloud:性能、扩展、企业级

自托管产品

MST

在大多数情况下,自动压缩策略 足以自动压缩您的分块。但是,如果您希望对压缩有更多控制,也可以手动压缩特定的分块。

在开始之前,您需要一个要压缩的分块列表。在此示例中,您将使用一个名为 example 的超表,并压缩三天前的分块。

  1. 在 psql 提示符下,选择表 example 中所有三天前的分块

    SELECT show_chunks('example', older_than => INTERVAL '3 days');
  2. 这将返回一个分块列表。记下分块的名称

    show_chunks
    1_timescaledb_internal_hyper_1_2_chunk
    2_timescaledb_internal_hyper_1_3_chunk

当您对分块列表满意后,可以使用分块名称手动压缩每个分块。

  1. 在 psql 提示符下,压缩分块

    SELECT compress_chunk( '<chunk_name>');
  2. 使用此命令检查压缩结果

    SELECT *
    FROM chunk_compression_stats('example');

    结果显示给定超表的分块、它们的压缩状态以及其他一些统计信息

    chunk_schemachunk_namecompression_statusbefore_compression_table_bytesbefore_compression_index_bytesbefore_compression_toast_bytesbefore_compression_total_bytesafter_compression_table_bytesafter_compression_index_bytesafter_compression_toast_bytesafter_compression_total_bytesnode_name
    _timescaledb_internal_hyper_1_1_chunk已压缩8192 字节16 KB8192 字节32 KB8192 字节16 KB8192 字节32 KB
    _timescaledb_internal_hyper_1_20_chunk未压缩
  1. 对所有要压缩的分块重复此操作。

或者,您可以使用 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> 可以是两周或六周,但不能是一个月。

关键词

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