在大多数情况下,自动压缩策略 足以自动压缩您的数据块。但是,如果您想要更好地控制压缩,您也可以手动压缩特定的数据块。
在开始之前,您需要一个要压缩的数据块列表。在本示例中,我们使用一个名为 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|Compressed|8192 bytes|16 kB|8192 bytes|32 kB|8192 bytes|16 kB|8192 bytes|32 kB|||_timescaledb_internal|_hyper_1_20_chunk|Uncompressed||||||||||对所有要压缩的数据块重复此操作。
或者,您可以使用 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>
可以是两周或六周,但不能是一个月。
关键词
在此页面上发现问题了吗?报告问题 或 在 GitHub 上编辑此页面。