我已经配置cron使用以下规则每天调用pg_dump:
# xyz database backups:
00 01 * * * root umask 077 && pg_dump --user=xyz_system xyz | gzip > /var/xyz/backup/db/xyz/`date -u +\%Y\%m\%dT\%H\%M\%S`.gz
基本上,它可以工作。数据库相对快速且呈指数增长(但是指数不是很大)。目前,压缩后的转储大约需要160MB。转储数据库后,系统开始爬网。我使用该top
命令看到的平均负载约为200, 200, 180
。基本上,服务器几乎没有响应。
第一个问题是如何确定瓶颈在哪里。I / O操作繁重是否会导致性能不佳?是由表锁定问题引起的吗?也许是内存问题?pg_dump
命令的输出通过管道传递到gzip
命令。它是顺序的,即整个转储都放在内存中(交换问题?),然后压缩或并发(即gzip压缩得到的内容并等待更多)?可能是由其他因素引起的吗?
在第二个问题是如何使倾倒操作该系统的主要功能侵扰程度较低。据我了解,由于数据库的完整性,转储不会花费太多时间。有表写锁等。我可以做些什么来限制问题(或考虑数据库的增长而延迟它)。
在第三个问题:是否已经时间来了解更多的高级数据库配置?当没有执行数据库备份时,系统运行正常,但是数据库转储问题也许是传入问题的第一个症状?
pg_dump
100%CPU的问题,它来自gzip。指定pg_dump --compress=0
可以在Ubuntu 16.04上为我解决。此后备份也非常快。注意容器中的gzip压缩;可能无法达到您的期望。