瀚高数据库
目录
环境
症状
问题原因
解决方案
环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 8
版本:4.5.8
症状
安装时序库timescaledb,使用数据压缩功能,压缩操作非常慢,导致压缩进程一直在运行,大量占用磁盘IO。版本为2.11
问题原因
经过分析,与参数timescaledb.enable_compression_indexscan有关。将此参数关闭(off)时,压缩速度明显提升。此参数的默认是打开(on)状态。以下的表1 是对比测试
表1
分区(chunk)大小 | 压缩时间 | 参数配置 |
---|---|---|
4.8G | 约40min | enable_compression_indexscan = ‘ON’ |
4.8G | 约4min | enable_compression_indexscan = ‘OFF’ |
5G | 约54min | enable_compression_indexscan = ‘ON’ |
5G | 约4min | enable_compression_indexscan = ‘OFF’ |
官方github上有人提出这个问题,并进行了大量讨论。 参考 [Bug]: Performance degradation (5x slower) on chunk compression after update from TimescaleDB 2.9.0 to 2.11.1 #5902
官方给出相关解释:
在2.11之前,数据压缩成本受排序的影响,排序的成本取决于表的大小和分配的内存大小(work_mem)。如果表很大,内存设置的很小,在这种情况下,元组将作为临时文件写到磁盘。现在,排序成本将会增加,因为其也包括了IO操作。此外在客户的系统中发现了这样的趋势:在大的分区压缩期间会创建大型临时文件导致性能下降。为了优化压缩,我们在压缩代码中添加了一个智能选项,以选择与压缩设置配置相匹配的相关索引。这将使排序成本降低,因为数据在索引中是排好序的。从理论上讲,这是对压缩功能的一个优化,但事与愿违。
注:在新版本TimescaleDB 2.14.1上默认情况下参数timescaledb.enable_compression_indexscan已禁用。
解决方案
将此参数关闭。设置参数timescaledb.enable_compression_indexscan值为off。