Я использую PostgreSQL 10.1 на MAC, на котором я пытаюсь настроить потоковую репликацию.Я настроил и ведущий, и ведомый на одну и ту же машину.Я считаю, что задержка потоковой репликации медленнее, чем ожидалось на 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;
Однако наблюдение является очень неожиданным.Задержка увеличивается с момента запуска транзакций на главном сервере.
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, и я считаю, что задержка вполне разумна.
Я что-то упустил?