目前有两台postgres db, 使用stream replication 做主从同步,在比较重的写操作时发生了比较重的延迟.
通过对
pg_xlog_location_diff(pg_current_xlog_location(), sent_location) AS not_sent,
pg_xlog_location_diff(sent_location, write_location) AS not_written,
pg_xlog_location_diff(write_location, flush_location) AS not_flushed,
pg_xlog_location_diff(flush_location, replay_location) AS not_replayed
FROM pg_stat_replication;
这几个参数的监控,我们发现在
pg_current_xlog_location() - (sent_location)有比较重的延迟,延迟的size将近在100MB 甚至更大.
网络的吞吐量最大值只达到16MB/s.
本地模拟测试,增加数据表的字段
一个表将近1300W数据,size 在10G.
我们在观察主从两边的wal log 的数目时发现,从库远远落后于主库,整个操作会生成104 个wal 文件.
手工对比主从的wal file. 从库将近落后30~50多个wal file.
Client connecting to 192.168.6.55, TCP port 5001
[ 3] local 192.168.6.56 port 54328 connected with 192.168.6.55 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.09 GBytes 939 Mbits/sec
1GB 已经达到了网卡的极限.
我们数据库所用的包为官网的包.Max_send_size = xblocksize * 16 (xblocksize = 8k default value)
问题是:理论上stream replication 可以达到我网卡的极限值,即1G/s,所以这次同步的延迟应该保持到1s以内.
有没有其他参数会影响postgres的stream replication.
期待高手的答复.
把从库的fsync关掉
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。