Dar*_*zak 8 postgresql performance database-backup
我已将 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
Run Code Online (Sandbox Code Playgroud)
基本上,它有效。数据库增长相对较快且呈指数增长(但指数不是很大)。目前,压缩后的转储大约需要 160MB。当数据库被转储时,系统开始爬行。我使用该top
命令看到的平均负载约为200, 200, 180
. 基本上服务器几乎没有响应。
第一个问题是如何确定瓶颈在哪里。性能低下是I/O操作繁重导致的吗?是由表锁定问题引起的吗?也许这是一个内存问题?pg_dump
命令的输出通过管道传输到gzip
命令。它是顺序的,即整个转储放在内存中(交换问题?)然后压缩或并发(即 gzip 压缩它得到的东西并等待更多)?可能是由其他因素引起的吗?
在第二个问题是如何使倾倒操作该系统的主要功能侵扰程度较低。据我了解,由于数据库完整性,转储不能花费太多时间。有表写锁等。我可以做些什么来限制问题(或延迟它,考虑到数据库增长)。
在第三个问题:是否已经时间来了解更多的高级数据库配置?系统工作正常,当不执行数据库备份时,但也许数据库转储问题是传入问题的第一个症状?
小智 14
哇。数量惊人的问题。我会尝试解决一些问题,但这个答案还不完整。
如何确定瓶颈在哪里。
top
首先使用以查看转储期间发生的情况。检查进程 CPU 使用率、进程状态。D
意思是“等待 I/O”。
性能低下是I/O操作繁重导致的吗?
是的,很有可能。
是由表锁定问题引起的吗?
也许。您可以使用pg_stat_activity
系统视图查看转储期间 postgres 中发生的情况。
也许这是一个内存问题?
非常不可能。
pg_dump 命令的输出通过管道传送到 gzip 命令。它是顺序的,即整个转储放在内存中(交换问题?)
不可以。gzip 是在流模式下工作的块压缩器,它不会将所有输入保留在内存中。
然后压缩或并发(即 gzip 压缩它得到的并等待更多)?
是的,它逐块压缩,输出并等待更多。
可能是由其他因素引起的吗?
是的。
据我了解,由于数据库完整性,转储不能花费太多时间。有表写锁等。我可以做些什么来限制问题(或延迟它,考虑到数据库增长)。
转储持续时间对转储完整性没有影响。通过所有 pg_dump 进程使用一个具有可重复读隔离级别的事务来确保完整性。没有表写锁。
是时候了解更高级的数据库配置了吗?系统工作正常,当没有执行数据库备份时,但也许数据库转储问题是传入问题的第一个症状?
永远不会太晚。从http://wiki.postgresql.org/wiki/Performance_Optimization开始。
归档时间: |
|
查看次数: |
11103 次 |
最近记录: |