写点什么

postgresql 数据库 timescaledb 时序库 超级表 块的压缩(compress_chunk()的应用)

用户头像
Yang
关注
发布于: 2021 年 05 月 06 日

postgresql 数据库 timescaledb 时序库 超级表 块的压缩(compress_chunk()的应用)


前言

在工作中,使用 postgresql 数据库 尤其是 timescaledb 时序库往往会遇到一些问题:甲方提供的内存不足,只能保留部分数据,或者储存的的数据量太大这个 时候我们就需要对数据压缩了


compress_chunk()

在 timescaledb 时序库 有专门的函数 api compress_chunk() 用来压缩超级表

参数

compress_chunk 函数用于压缩特定的块。当用户想要更多地控制压缩调度时,最常用这个函数来代替 add_compression_policy 函数必选参数



可选参数



CREATE OR REPLACE FUNCTION "hrmw"."compress_chunk"("uncompressed_chunk" regclass, "if_not_compressed" bool=false)  RETURNS "pg_catalog"."regclass" AS '$libdir/timescaledb-1.7.1', 'ts_compress_chunk'  LANGUAGE c VOLATILE STRICT  COST 1
复制代码

使用步骤

一般在 timescaledb 时序库 大量数据的表都是超级表 ,如果不是的建议你改为超表,要不你用 timescaledb 数据库就没有多少意义了

1.改为超表

运用 create_hypertable()来把普通表改为超级表


SELECT create_hypertable('表名_cs', 'alarm_time', chunk_time_interval => INTERVAL '7 day');
复制代码


如果有啥不懂的话,可以参考postgresql数据库 timescaledb 时序库 把大数据量表转换为超表这篇文章

2.把超表改为可压缩状态

ALTER TABLE 模式名.表名 SET (timescaledb.compress,timescaledb.compress_segmentby = '字段',timescaledb.compress_orderby = 'collect_time DESC');
复制代码

3.压缩

压缩块


SELECT compress_chunk( '_timescaledb_internal._hyper_4_238_chunk');
复制代码

解压缩

SELECT decompress_chunk('_timescaledb_internal._hyper_4_26_chunk');
复制代码

查看压缩后状态

压缩前

压缩后

查询压缩后空间状态

SELECT * FROM timescaledb_information.compressed_chunk_stats;
复制代码


压缩后存放的位置



如果有啥问题 欢迎指出,谢谢。

发布于: 2021 年 05 月 06 日阅读数: 23
用户头像

Yang

关注

还未添加个人签名 2021.04.28 加入

csdn作者 数据库从事人员

评论

发布
暂无评论
postgresql数据库 timescaledb 时序库 超级表 块的压缩(compress_chunk()的应用)