postgresql - docker 容器启动时 pg_restore 变慢

标签 postgresql amazon-ec2 docker pg-restore

我有dockerized我的 PostgreSQL 数据库(大约 4GB 的数据)。它在我的笔记本电脑(Linux、2 核 CPU、SSD、8GB RAM)上运行良好。我正在尝试使用 docker hub 移动它以释放 AWS EC2 t2.micro。

在容器启动时,会执行一些脚本,设置模式和表的结构,并使用 pg_restore(自定义,压缩格式)用数据填充它。在我的笔记本上大约需要 20 分钟。但在 t2.micro 上,它看起来可能需要数小时或数天(10 小时后集群中有 2.4GB)。

问题是,为什么它这么慢,而进程 (postgres) 没有使用太多 CPU(CPU 积分余额正在增加!),也没有一些明显的磁盘操作......导致这种缓慢的限制是什么有进展吗?

还有日志消息:

日志:使用过时的统计信息而不是当前的统计信息,因为统计信息收集器没有响应

我找到了here , 但我不知道是什么原因造成的...

我也在大约 1 小时后 reniced 进程到 19,因为服务器无法使用(响应太慢),但是当我 renice 到 0 返回时,它似乎没有任何效果。

提前致谢,J。

附言:

似乎是 i/o 问题...这是 iostat 的输出:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.23    0.45    0.26   97.54    0.66    0.87

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda             90.79        33.11      1469.24    2718730  120629372

同样在 top 实用程序中,我几乎一直都能看到该进程的状态“D”。

最佳答案

肯定是i/o credit limit导致的。使用具有 limits 的小型 SSD(免费层最多 30GB)时可能会出现此问题在全负载大约 30 分钟后导致磁盘性能非常低(不考虑 CPU 积分)。

我能够分几个阶段执行数据库的完全恢复

  • docker run ...(30 分钟)
  • docker 暂停(16 小时——以积累完整的 i/o 积分)
  • docker unpause ...(25 分钟直到数据库恢复)。

关于postgresql - docker 容器启动时 pg_restore 变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35347008/

相关文章:

Postgresql:使用密码编写脚本 psql 执行

node.js - 本地运行的 Mocha 测试无法在 Jenkins 上运行(环境问题)

docker - 在Dockerfile中,COPY当前目录除一个目录外的所有内容

ruby-on-rails - VPC无法访问数据库实例

c++ - "virtual memory exhausted"构建 Docker 镜像时

python - 在 python docker 镜像上使用 GPU

postgresql - 如何将数据导入postgres

sql - Postgresql 数组包含条目的数量?

sql - 如何在 Postgres 中分组并返回总和行

amazon-web-services - 同一域上的 CloudFront 静态网站和 EC2 API