我有一个相当大的 PostgreSQL 数据库(带有时间刻度插件)。现在它在 SSD 上消耗大约 500Gb。大多数数据都是时间序列的形式。在大多数情况下,几个月前的数据并不是很有趣。
我的想法是将这些数据移动到便宜的 SATA 硬盘驱动器上,而不是购买更昂贵的 SSD。这是一个好主意,是否有一些好的实践来实施?
我的幼稚实现是:
保留两个数据库(或在便宜的 HDD 上创建一个表空间)。每隔几个小时将数据从“快速”(SSD)数据库提取到“慢速”数据库(HDD)。每隔几天,从慢速数据库中删除数据。这是一个好主意吗?我很高兴听到一些反馈和更好的建议。
这是一个更好的架构:
在慢速驱动器上创建一个新的表空间。
在该新表空间上设置存储参数
seq_page_cost
或random_page_cost
更高,以便 PostgreSQL 优化器知道磁盘速度较慢。按时间范围对大时间序列表进行分区(对所有受影响的表使用相同的边界),以便最终每个分区都有几十个分区。
将旧分区移动到慢速表空间。
然后,您仍然可以访问所有数据。
使用 PostgreSQL v11 或更高版本进行分区。
来自 Timescale 的 PM 在这里。我们的下一个版本计划引入压缩,这将有助于解决问题。表空间是个好主意,我们计划最终允许您将旧块移动到不同的表空间。请随时与我们联系以获取有关该功能的更多信息,因为它仍在开发中。
PS,删除数据时确保使用 drop_chunks,以免创建太多最终不得不被清理的墓碑。