Репликация потоковой передачи postgresql на MacOS медленная - PullRequest
0 голосов
/ 14 декабря 2018

Я использую 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, и я считаю, что задержка вполне разумна.

Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...