Description
Имеем некий виртуальный сервер с 4 CPU и HDD.
В PostgreSQL 11.3 создаем БД и наполняем тестовыми данными. Например так:
pgbench -i -s 200
Берем pg_probackup 2.1.3 и настраиваем бэкап-каталог. Допустим, так:
pg_probackup init -B /var/lib/pgsql/11/backups/probackup
pg_probackup add-instance -B /var/lib/pgsql/11/backups/probackup/ -D /var/lib/pgsql/11/data/ --instance om11
Далее сосздаем цепочку из сжатых бэкапов. Один FULL и два DELTA.
pg_probackup backup -B /var/lib/pgsql/11/backups/probackup/ --instance om11 -b FULL --stream --compress-algorithm=zlib --compress-level=4 --log-level-console=verbose -j 4
pg_probackup backup -B /var/lib/pgsql/11/backups/probackup/ --instance om11 -b DELTA --stream --compress-algorithm=zlib --compress-level=4 --log-level-console=verbose -j 4
pg_probackup backup -B /var/lib/pgsql/11/backups/probackup/ --instance om11 -b DELTA --stream --compress-algorithm=zlib --compress-level=4 --log-level-console=verbose -j 4
Теперь необходимо смоделировать ситуацию, когда на диске с бэкапом кончается место и добиться падения merge с ошибкой "No space left on device". Для следующего примера мне удалось получить ошибку, когда на диске оставалось 3ГБ свободного пространства.
Подаем нагрузку командой "pgbench -c 3 -j 80 -T 3000 -P 1" и запускаем merge в 4 потока:
pg_probackup merge -B /var/lib/pgsql/11/backups/probackup/ --instance om11 --log-level-console=verbose -i PSKHNN -j 4
В итоге у меня диск имел 100% нагрузку по io, а спустя некоторое время merge упал с ошибкой вида:
ERROR: File: /var/lib/pgsql/11/backups/probackup/backups/om11/PSKMBB/database/base/13878/33085.2_tmp, cannot write backup at block 35693: No space left on device
ERROR: Cannot write block 112460 of "/var/lib/pgsql/11/backups/probackup/backups/om11/PSKMBB/database/base/13878/16550": No space left on device
ERROR: File: /var/lib/pgsql/11/backups/probackup/backups/om11/PSKMBB/database/base/13878/16550.2_tmp, cannot write backup at block 39001: No space left on device
ERROR: Interrupted during page reading
ERROR: Data files merging failed
Далее высвобождаем n-количество байт и запускаем merge в 1 поток:
pg_probackup merge -B /var/lib/pgsql/11/backups/probackup/ --instance om11 --log-level-console=verbose -i PSKHNN -j 1
В итоге получаем ошибку и невалидный бэкап:
ERROR: Cannot read block 35686 of "/var/lib/pgsql/11/backups/probackup/backups/om11/PSKMBB/database/base/13878/33085.2" read 48 of 509
ERROR: Data files merging failed
Полная версия лога - https://oc.postgrespro.ru/index.php/s/rhn8JppgJ5lXg5o