Skip to content

Зачем нужно хранить FULL для выполнения последующих инкрементных бэкапов #375

Open
@triwada

Description

@triwada

Есть проблема с необходимостью хранения большого объёма бэкапов, может есть возможность оптимизировать этот момент?
Описание:

  1. на локальный раздел в ОС выполняется бэкап согласно расписанию: FULL раз в сутки, каждые 2 часа DELTA или PAGE.
  2. согласно документации DELTA/PAGE выполняется относительно успешного предыдущего успешного FULL или DELTA/PAGE (не указано, что для всех инкрементных нужно е��ё хранить FULL)
  3. выполненные бэкапы постепенно переносятся на ленту, после чего их по идее можно удалять, освобождая место на локальном разделе бэкапов.

Но если удалить FULL, то бэкапы DELTA/PAGE не выполняются.

[postgres@pglab ~]$ pg_probackup-std-12 show -B /data/backup --instance pgpro-std12
=========================================================================================================================================
 Instance     Version  ID      Recovery Time           Mode   WAL Mode  TLI    Time   Data   WAL  Zratio  Start LSN   Stop LSN    Status
=========================================================================================================================================
 pgpro-std12  12       QS3B8N  2021-04-25 01:46:00+03  DELTA  STREAM    1/1      6s  167kB  32MB    1.00  7/4F000028  7/4F000168  OK
 pgpro-std12  12       QS3B5V  2021-04-25 01:44:20+03  DELTA  STREAM    1/1      5s  167kB  32MB    1.00  7/4D000028  7/4D000168  OK
 pgpro-std12  12       QS3B48  2021-04-25 01:43:24+03  FULL   STREAM    1/0     10s  825MB  16MB    1.00  7/4B000028  7/4B000168  OK


[postgres@pglab ~]$ rm -rf /data/backup/backups/pgpro-std12/QS3B48

[postgres@pglab ~]$ pg_probackup-std-12 backup -B /data/backup --instance pgpro-std12 -b DELTA --stream --progress --log-level-console=INFO
INFO: Backup start, pg_probackup version: 2.4.10, instance: pgpro-std12, backup ID: QS3B9Q, backup mode: DELTA, wal mode: STREAM, remote: false, compress-algorithm: none, compress-level: 1
WARNING: Current PostgreSQL role is superuser. It is not recommended to run backup or checkdb as superuser.
WARNING: Valid backup on current timeline 1 is not found, trying to look up on previous timelines
WARNING: Cannot find valid backup on previous timelines, WAL archive is not available
ERROR: Create new full backup before an incremental one
WARNING: backup in progress, stop backup
WARNING: Backup QS3B9Q is running, setting its status to ERROR

Понятно, что FULL нужен для рестора, но зачем он нужен для последующих DELTA/PAGE (НЕ первого после FULL)?
Если поведение изменится, то можно существенно сэкономить на затратах на локальный диск для бэкапов, выступающих в качестве временного буфера перед перемещением бэкапов на ленту.
Есть довольно весомая разница в объёмах (особенно на БД с повышенной генерацией WAL) в хранении либо 1xFULL+1xDELTA, либо 1xFULL+11xDELTA (при условии, что DELTA каждые 2 часа).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions