pg_start_backup
eseguirà un checkpoint, come nota dezso. Ciò ha un impatto, ma il database esegue comunque controlli abbastanza regolarmente e deve farlo per funzionare, quindi chiaramente non sono un problema per te. Un checkpoint precoce significa che sono stati accumulati meno dati, il che significa che se un checkpoint pg_start_backup
avrà un impatto minore del normale.
Dove devi preoccuparti è il pg_basebackup
passo rsync o equivalente . L'I / O di lettura da questo non sarà troppo male poiché è sequenziale, ma probabilmente danneggerà ancora significativamente le prestazioni di I / O del database e tenderà anche a spingere i dati caldi dalla cache RAM a favore di meno dati utilizzati, causando il blocco della cache quando i dati più necessari vengono quindi riletti.
È possibile utilizzare nice
e ionice
per aiutare a limitare l'impatto dell'I / O (ma non l'impatto della cache); tuttavia, c'è un costo per quello. Il backup richiederà più tempo e fino a quando non completi il backup ed esegui il pg_stop_backup
tuo sistema non è in grado, a quanto ho capito, di accumulare WAL, accumulare debito del checkpoint per un GRANDE checkpoint alla fine dell'esecuzione del backup e sta accumulando tabella e indice gonfiare perché non può ripulire le file morte. Quindi davvero non puoi permetterti di avere il backup che durerà per sempre, specialmente se hai tabelle churn molto alte.
Alla fine, è difficile dire se è possibile utilizzare in modo sicuro pg_start_backup
e pg_stop_backup
per backup a caldo nel proprio ambiente. La maggior parte delle persone può, ma se sei vicino al limite di ciò che il tuo hardware può fare, ha requisiti di temporizzazione rigidi, non può permettersi il rischio di uno stallo e avere tavoli di abbandono molto alti e tavoli molto grandi, potrebbe essere problematico .
Sfortunatamente, devi praticamente provarlo e vedere.
Se è possibile, potrebbe valere la pena rilasciare CHECKPOINT
un'istantanea atomica del volume su cui si trova il database invece di utilizzare LVM, gli strumenti della SAN, EBS o qualsiasi altra cosa ci si trovi. Se puoi farlo, puoi copiare l'istantanea a tuo piacimento. Questo approccio non è adatto per l'esecuzione di un backup di base per PITR / warm standby / hot standby, ma è perfettamente buono per una copia di backup statica e ha un impatto molto inferiore sul sistema. Puoi farlo solo se le tue istantanee sono atomiche e il tuo intero database, incluso WAL, è su un solo volume.
Una possibilità che non ho ancora studiato è quella di combinare i due approcci. Mi viene in mente che uno potrebbe ( non testato e forse sbagliato e non sicuro , non lo so ancora):
pg_start_backup
- Attiva le istantanee di tutti i tablespace, il datadir principale e il volume xlog
pg_stop_backup
- Copia WAL fino all'archivio finale da
pg_stop_backup
- Copia i dati dai volumi snapshot
In sostanza, l'idea è di ridurre il tempo necessario al DB per ritardare i suoi punti di controllo prendendo un punto nel tempo di ciascun volume che è possibile copiare a piacere.