postgresql - macOS 上的 postgresql 流式复制速度很慢
问题描述
我在尝试设置流复制的 MAC 上使用 PostgreSQL 10.1。我将主机和从机都配置在同一台机器上。我发现流复制滞后在 mac 上比预期的要慢。相同的测试在 Linux Ubuntu 16.04 机器上运行,没有太多延迟。
我有以下插入脚本。
for i in $(seq 1 1 1000)
do
bin/psql postgres -p 8999 -c "Insert into $1 select tz, $i * 127361::bigint, $i::real, random()*12696::bigint from generate_series('01-01-2018'::timestamptz, '02-01-2018'::timestamptz, '30 sec'::interval)tz;"
echo $i
done
使用以下查询测量滞后,
SELECT pg_last_wal_receive_lsn() - pg_last_wal_replay_lsn();
SELECT (extract(epoch FROM now()) - extract(epoch FROM pg_last_xact_replay_timestamp()))::int;
然而,观察结果非常出乎意料。从 master 上开始事务的那一刻起,延迟就在增加。
Slave localhost_9001: 12680304 1
Slave localhost_9001: 12354168 1
Slave localhost_9001: 16086800 1
.
.
.
Slave localhost_9001: 3697460920 121
Slave localhost_9001: 3689335376 122
Slave localhost_9001: 3685571296 122
.
.
.
.
Slave localhost_9001: 312752632 190
Slave localhost_9001: 308177496 190
Slave localhost_9001: 303548984 190
.
.
Slave localhost_9001: 22810280 199
Slave localhost_9001: 8255144 199
Slave localhost_9001: 4214440 199
Slave localhost_9001: 0 0
单个客户端插入单个表需要大约 4.5 分钟才能在主服务器上完成,而从服务器又需要 4 分钟才能赶上。请注意,除了用于测量滞后的脚本之外,不会同时运行任何选择。
我知道 PostgreSQL 中的重放非常简单,例如“将特定块移动到某个位置”,但我不确定这种行为。
我有以下其他配置,
checkpoint_timeout = 5min
max_wal_size = 1GB
min_wal_size = 80MB
现在,我在 Linux Ubuntu 16.04 机器上使用相同的配置运行相同的测试,我发现延迟非常合理。
我错过了什么吗?
解决方案
推荐阅读
- android - 更改 Intent 屏幕大小
- sql - 在大查询中连接多个表
- python - 消息:通过 Selenium 和 Python 点击复选框时元素不可见
- prestashop - Prestashop 1.6.1.18 永久维护模式
- c# - 清除 OpenXML word 文档内容或现有文本
- macos - 安装 texi2html 错误:无法取消链接已存在的对象
- java - 如何等待异步方法
- c# - 将数据库值绑定到 MaxLenght 属性
- html - 如何在相反方向添加背景颜色
- node.js - 是否可以在使用 pg-promise 的 INSERT 命令后获取“INSERT oid count”数据?