批量插入在 docker 容器中运行的 Postgres 数据库挂起

Posted

技术标签:

【中文标题】批量插入在 docker 容器中运行的 Postgres 数据库挂起【英文标题】:Bulk insert into Postgres database running in docker container hangs 【发布时间】:2021-09-02 08:07:08 【问题描述】:

我正在尝试将几千条记录以简单的表结构插入到 postgres 表中。 在我的 c# 单元测试中,我从最新的 docker alpine 映像创建了一个新数据库,然后使用 NPGSQL 创建一个表尝试插入几千条记录。

在大约 11k 条记录之后,容器似乎挂起,最终测试超时。停止插入记录后,容器日志不显示任何内容。

起初我以为是 NPGSQL,但是在普通(非 docker)数据库上的相同测试工作正常,所以它必须与 docker 映像有关? 我已经为 docker memory/cpu 以及 shared_buffers 和 max_connections 尝试了几种不同的设置,例如 postgres db。无论如何,测试都会挂在相同数量的插入上。

我意识到使用 COPY 命令更好地完成批量插入,但是对于这个测试,多个插入是相关的。

NpgSql 5.0.7 x86_64-pc-linux-musl 上的 PostgreSQL 13.3,由 gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424 编译,64 位

【问题讨论】:

【参考方案1】:

在注意到更多操作超时后。 我卸载了 docker,重新启动了我的机器并重新安装了 docker。这似乎已经解决了现在的问题。

【讨论】:

以上是关于批量插入在 docker 容器中运行的 Postgres 数据库挂起的主要内容,如果未能解决你的问题,请参考以下文章

如何批量删除Docker中已经停止的容器

docker 批量删掉已经停止的容器

Docker批量操作容器

重新启动 Nginx 或在证书更改时重新加载证书缓存

使用 Node.js/Sequelize 进行批量插入时 PostgreSQL 崩溃

[云原生专题-14]:容器 - 批量定义构建运行多个微服务- docker编排工具Compose