postgresql - 优化包含测试数据的dockerized postgres数据库的(磁盘/内存)

标签 postgresql docker postgis

上下文

为了在CI管道中进行本地开发和测试,我想要一个postgres docker镜像,其中包含一些从生产中采样的数据(几十MB)。我将定期重建此图像,以确保采样数据保持最新。

我完全不在乎数据完整性,但是在运行时我非常在乎图像大小和容器磁盘/内存使用情况。启动时间最多应为几分钟。

我构建了什么

我有一个构建在官方postgres(postgis)Docker镜像之一之上的docker文件,但它实际上是初始化数据库并使用pg_restore插入我的示例数据。

尝试优化

我使用mutlistage构建,只是将postgres目录复制到最终镜像中(这有助于构建过程中使用的节点)。

我注意到pg_xlog目录很大,在逻辑上似乎多余,因为在密封图像之前我会很乐意检查点并抛弃任何WAL。我不知道如何摆脱它。我尝试使用以下标志启动postgres:-min_wal_size=2 --max_wal_size=3 --archive_mode=off --wal_keep_segments并运行Checkpoint并等待几秒钟,但似乎没有任何改变。我还尝试删除目录的内容,但这似乎在下次启动时破坏了数据库。

除了将实际的数据库放置在镜像中之外,我还可以在镜像中保留一个pg_dump文件,并让镜像入口点从中建立数据库。我认为这将改善图像大小(尽管我不清楚为什么数据库比转储占用更多的空间,除非索引特别大-我实际上认为转储格式没有数据库本身那么紧凑,所以这可能会抵消索引大小)。显然,这会影响启动时间(但不会如此)。

摘要/问题

我要这样做正确吗?如果是这样,我可以使用哪种磁盘/内存优化?我尤其可以删除/缩小pg_xlog吗?

我正在使用Postgres 9.5Postgis 2.X

最佳答案

服务器运行过的max_wal_size是否大于3?如果是这样,它可以通过将旧的wal文件重命名以供将来使用来“回收”很多wal文件。一旦将它们重命名,即使以后减小max_wal_size,也不会删除它们,直到使用它们。

I also tried deleting the contents of the directory, but that seemed to break the database on its next startup.



您可以使用pg_resetxlog修复它。只是不要养成盲目的运行的习惯,在测试环境之外运行非常危险。

关于postgresql - 优化包含测试数据的dockerized postgres数据库的(磁盘/内存),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61227449/

相关文章:

SQLGrammer异常 : could not execute statement

postgresql - PostgreSQL 用于查询处理和优化的中间语言是什么?

java - 如何使用 Hibernate 检索 SQL 错误消息

docker - 无法解析docker容器内的域名

postgresql - Peer authentication failed for user "geo"geodjango 教程 postgresql 错误

sql - 如何在 PostgreSQL 中执行查询结果

python - Discord 机器人 + 谷歌云运行 : "Container failed to start."

docker - Docker构建失败并出现数组切片错误

ruby-on-rails - Rails Postgis 升级问题

mysql - ST_Buffer 相当于 MySQL 中基于 Circle 的搜索?