docker 容器启动速度慢 pg_restore

slow pg_restore on docker container startup

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

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

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

还有日志消息:

LOG: using stale statistics instead of current ones because stats collector is not responding

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

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

提前致谢,J。

PS.:

似乎存在 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

同样在顶级实用程序中,我几乎一直都可以看到该进程的状态 "D"。

肯定是i/o信用额度引起的。使用具有 limits 的小 SSD(免费层高达 30GB)时可能会出现此问题,导致满载约 30 分钟后磁盘性能非常低(不考虑 CPU 积分)。

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

  • docker 运行 ...(30 分钟)
  • docker 暂停(16 小时 -- 累积完整的 i/o 学分)
  • docker 取消暂停...(25 分钟直到数据库恢复)。