目前,我希望有人能就我将要推进的DB归档过程向我提供建议。
我有一个数据库(DB-1),它有两个非常大的表,一个有25 GB的数据,另一个是20 GB的数据。这会导致主要的性能问题,甚至我也有索引。
因此,我们考虑用下面的过程对旧数据进行归档,
发布于 2019-07-11 10:14:56
这是错误的做法。
你要找的是分区。
您可以创建覆盖一年的范围分区。要删除旧数据,只需删除不再需要的年份的分区。
如果出于某些原因需要保留数据,也可以将分区从表中分离出来。然后数据仍然“躺在”周围,但不会出现在(分区的)表中。您可以直接查询(分离的)分区来访问该数据。您甚至可以将这个(分离的)分区移动到一个较慢的硬盘上,以便在有多个磁盘的情况下释放快速磁盘上的空间。
但是您甚至可以看到,仅仅分区可能已经提高了性能,但这在很大程度上取决于您的查询。
请注意,您应该为此使用Postgres 11,因为分区在旧版本中没有那么复杂。
发布于 2019-08-06 20:25:46
尽管您应该毫无疑问地升级您的当前版本(我建议您离开您现在正在开发的EDB系统,并使用基于社区的Postgres 11),即使您无法升级,分区仍然比创建第二个数据库要好得多。
通过将表重新创建为同一数据库中的一组分区,您将能够以更干净的方式添加/删除数据,这将使处理真空变得更加容易。即使在9.5中,您也可以利用表继承构建分区,方法是首先为传入数据添加分区,然后以不同的间隔(可能是每月一次)创建分区,然后将数据移动到这些分区中。这可以通过一系列INSERT INTO partition SELECT * FROM table WHERE <timestamp>样式的语句来实现。
我怀疑您可以自己管理(您需要基本的sql和编写简单触发器/函数的能力.这里有一个指向9.5博士的链接,但是如果您需要帮助,您可以与Postgres聊天社区中的一个联系,或者如果您想深入了解,可以与支持公司联系。
https://stackoverflow.com/questions/56985861
复制相似问题