首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL最小化码头图像数据dir

PostgreSQL最小化码头图像数据dir
EN

Database Administration用户
提问于 2022-02-08 13:15:28
回答 2查看 524关注 0票数 2

我正在准备一个基于官方形象的Postgres码头形象。我有一个应用程序,它用初始数据填充数据库(对于大约300 of的数据,这大约需要一个小时)。我希望从Postgres数据库中生成一个图像,以便数据已经初始化。这很好,但是由于WAL的性质,PG_DATA目录比必需的要大。对于码头的图像分布,缩小PG_DATA是非常重要的。如果我稍后考虑再添加几个数据层,这些数据都会添加自己的一组WAL文件,而这些文件并不是绝对必要的。

我有什么选择来最小化PG_DATA?我的主要问题是最小化WAL,最后我将讨论最小化PG_DATA的其他领域。

删除WAL

什么时候我才能安全地删除WAL?

要明确的是,这是一个被丢弃的容器,里面装满了一些初始数据。这并不是为了成为一个高效的系统。archive_mode = offwal_level = minimal,没有复制。

我试图通过以下配置来保持WAL的小:

代码语言:javascript
复制
wal_keep_size = 0
wal_recycle = off
min_wal_size = 32MB
max_wal_senders = 0 # necessary due to wal_level = minimal

但是,即使在发出CHECKPOINT;之后,pg_wal目录仍然大到200 is。为什么Postgres不删除这些文件?根据设置,我假设只保留32 be。在CHECKPOINT;和停止服务器之后,从pg_wal中删除所有文件安全吗?

从其他问题和答案中我可以看出,Postgres应该自动删除WAL文件。有些问题我已经知道了,但不要谈论我的具体问题和用例:

这些问题主要涉及归档、备份、复制、PITR。但这不适用于我的用例。

最小化PG_DATA

我的想法是,在执行CHECKPOINT;并清除WAL之后,我还可以执行一个VACUUM FULL;来向文件系统释放任何空间。这看起来像预期的那样工作,我看到base目录越来越小了。当然,我希望这在删除/更新数据之后会产生最大的效果,而不是在初始化时大多数情况下插入行之后。

还有更多的选项来最小化PG_DATA吗?

EN

回答 2

Database Administration用户

回答已采纳

发布于 2022-02-08 20:23:16

填充数据库后,干净地关闭它(重要!)然后跑

代码语言:javascript
复制
pg_resetwal -D /path/to/data/directory

会截断你的沃尔。永远不要手动删除WAL文件。

票数 3
EN

Database Administration用户

发布于 2022-02-08 21:51:28

在检查点的末尾,Check指针查看最近使用了多少WAL,并回收过时的WAL文件(通过将它们重命名为“来自未来”的名称),以供重用。它删除超出它想要回收的数量的任何额外的过时的WAL文件。问题是,在批量装载期间,WAL编写得非常快,因此许多文件被回收。但是,当大容量加载突然完成,WAL不再得到快速编写时,这些可回收的文件仍然存在。下一个检查点,当事情变得更安静时,看到它不再需要那么多回收的WAL文件,但是它不愿意删除现有的预先回收的文件,它只是拒绝通过删除现在已经过时的(过去的)文件来回收更多的资源。但是,既然情况很好,就会有很少的,如果有的话。

最终,提前回收文件的过度供应将被耗尽和删除,但如果服务器现在非常安静,则需要很长时间才能使用完这些文件。

正如Laurenz所说,您可以使用pg_resetwal为您删除额外的文件(过去和将来)。你可以手动删除它们,但如果你搞砸了,你的数据可能是烤面包。您还可以在批量加载时关闭wal_recycle。这意味着每个WAL文件都将在需要时创建,因此没有一个文件会被回收。这将减慢(或可能加快)批量装载的数量,这取决于您的操作系统和FS。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/307161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档