【问题标题】:slow pg_restore on docker container startupdocker容器启动时pg_restore慢
【发布时间】:2016-05-22 16:22:29
【问题描述】:

我有dockerized 我的 PostgreSQL 数据库(大约 4GB 的数据)。它在我的笔记本电脑(linux、2core CPU、SSD、8GB RAM)上运行良好。我正在尝试使用 docker hub 移动它以释放 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 小时后 renice 进程到 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”。

【问题讨论】:

标签: postgresql amazon-ec2 docker pg-restore


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 2018-05-09
    • 2014-09-24
    • 1970-01-01
    • 2018-04-04
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多