我有一个现有的 postgresql 服务器,我想使用流复制将其复制到另一个位置。我如何才能最好地估计保持数据库合理同步所需的带宽量,使用我现在的实际工作量?我已经通读了该pg_stat_*
列表,但没有任何关于整体事务率或写入数据量的信息(pg_stat_bgwriter 除外,它具有自服务器上次启动以来的总计)。根据检查点日志写入的缓冲区数量(我相信每个是 8kB)是否在正确的范围内?
我有一个现有的 postgresql 服务器,我想使用流复制将其复制到另一个位置。我如何才能最好地估计保持数据库合理同步所需的带宽量,使用我现在的实际工作量?我已经通读了该pg_stat_*
列表,但没有任何关于整体事务率或写入数据量的信息(pg_stat_bgwriter 除外,它具有自服务器上次启动以来的总计)。根据检查点日志写入的缓冲区数量(我相信每个是 8kB)是否在正确的范围内?
好吧,非常粗略地说,在稳定状态下(即在您使用基本备份初始化备用服务器并与主服务器同步之后),保持备用服务器同步所需的带宽量将大致是您的主服务器的 WAL 卷吞吐量。
现在,您的主要 WAL 卷吞吐量是多少?基本上,您的主服务器每单位时间生成多少个 16 MiB WAL 文件。您可以在主目录中四处
pg_xlog
查看,看看有多少新文件正在被搅动。或者这是一个漂亮的 shell 命令,您可以使用depeszpsql
的功劳:(echo "ibase=16" psql -qAtX -c "select pg_xlogfile_name(pg_current_xlog_location())" | cut -b 9-16,23-24) | bc
该命令的输出将为您提供您所在的 WAL 文件的十进制数。在 10 分钟后再次运行该命令。从第二个数字中减去第一个数字,得到在该时间段内需要在主数据库和备用数据库之间同步多少个 16 MiB WAL 段。这将回答您的问题:
但!一些注意事项:
复制基础备份以使新的备用服务器上线的初始步骤需要大量带宽(因为您实际上需要复制整个
DATADIR
服务器才能启动新服务器),然后站会需要做一些工作赶上主要的当前位置。实际上,这意味着您需要在稳态需求之上提供大量额外带宽,以便能够在合理的时间内可靠地初始化新的备用服务器。主服务器生成的 WAL 量会受到wal_level
hot_standby
等设置的影响,当您真正想要启动备用服务器时,必须将其调高一旦您使用流式复制(如hot_standby_feedback )启用有用的设置将消耗更多带宽。
您可能会发现您的 WAL 吞吐量将有很大差异,具体取决于您的数据库、自动清理、检查点、DDL 等的繁忙程度。您将希望能够吸收这个额外的 WAL 卷以保持您的备用数据库同步。