未使用的表应该存档吗?

Should unused tables be archived?

我们的数据库中有一个 table 大约需要 25GB。当前代码不再使用它。

如果我们存档此 table,即使它不是 queried/used,它是否会带来任何性能改进(对于 table 的其余部分)?请提供解释。

我们正在使用 MySQL 和 AWS Aurora。

YES,归档不常用的数据将减轻更快和更频繁访问的数据存储系统的负担。不太可能需要的旧数据通常被放置在不需要包含仍在使用的数据的系统的速度和可访问性的系统上

归档数据存储在成本较低的存储层上,作为减少主存储消耗和相关成本的一种方式。通常,数据重复是对移动到较低存储层的数据执行的,这减少了整体存储占用空间并降低了二级存储成本

归档 tables 不会对 Aurora 产生任何影响。未使用的页面最终会从缓冲池中逐出 [1],从那时起,它们永远不会被拉回到数据库实例中,除非您进行会触及这些页面的查询。

您将继续支付存储成本(以及快照等其他间接成本),方法是将它们保持未使用状态。更好的选择是将未使用的数据移动到新集群,从中创建快照,然后删除集群。您始终可以在需要时通过恢复快照来恢复数据。然后可以通过删除这些未使用的 table 来清理原始数据库。这样您最终只需为快照付费,这样更便宜。

您还可以从 mysql 中导出数据(比如说 CSV)并将其存储在 S3/Glacier 中。唯一的问题是,当您需要访问数据时,将其加载回现有或新的数据库集群可能会耗费更多时间。

[1] 缓冲池使用 LRU 进行逐出。当您的工作负载长时间运行时,您最终会驱逐与未使用的 table 关联的所有页面。 Link: https://dev.mysql.com/doc/refman/5.5/en/innodb-buffer-pool.html

是的,归档将提高性能,同时减少 backup/recovery 周期的边距和速度。 在我最近的全职工作中,我已经在不同的项目上尝试过它,结果是惊人的。对于那些否认我只会说:

  • 减少占用空间减少磁盘 IO 和扫描
  • 占用空间的减少降低了缓冲区要求,从而降低了 RAM 要求。