In che modo PostgreSQL gestisce i checkpoint nel mezzo di un backup abilitato per WAL?


17

Su un PostgreSQL v9.0 ho un sistema di archiviazione WAL funzionante. Quindi WAL archivia un normale archivio (quando vengono creati 3 WAL o se un WAL è più vecchio di 15 minuti).

Ora aggiungo un pacchetto binario della directory PG_DATA (escluso il sottodirectoy pg_xlog). Per fare ciò eseguo una pg_start_backup(),copia binaria e a pg_stop_backup().

Penso di capire abbastanza bene cosa stanno facendo pg_start_backup e pg_stop_backup, il primo crea un checkpoint e l'ultimo assicura l'archiviazione dell'ultimo file WAL.

Dalla documentazione ufficiale possiamo vedere che per la copia dei dati binari dovremmo:

Eseguire il backup, utilizzando qualsiasi comodo strumento di backup del file system come tar o cpio (non pg_dump o pg_dumpall). Non è necessario né auspicabile interrompere il normale funzionamento del database mentre si esegue questa operazione.

Quindi sono abbastanza perplesso. Ciò significa che è possibile eseguire un Checkpoint mentre eseguiamo la copia. Ho visto molta documentazione che afferma che il comando di copia dovrebbe consentire la modifica dei dati durante l'esecuzione della copia, sono d'accordo con questo, semplicemente per trovare lo strumento giusto. Ma la mia domanda è come PostgreSQL gestirà il recupero con un contenuto pg_data contenente alcuni file che sono incoerenti (alcuni da prima del checkpoint, altri da dopo)?

Riproducendo i registri delle transazioni Postgresql sarà in grado di mettere tutti questi file nello stato giusto? Ho visto che creare tabelle e rilasciare operazioni sono pericolose mentre il backup sta eseguendo, non ci sono alcune operazioni pericolose come i comandi di vuoto ? Pg_backup sospende le operazioni del vuoto? Devo fare una copia del file globale / pg_control alla fine all'inizio del processo di copia binaria? Dovrei usare un filesystem abilitato per le istantanee (come con un xfs-freeze) per ottenere un processo di ripristino più veloce?

Ho visto che un arresto anomalo dello script di backup non avvierà automaticamente un pg_stop_backup, quindi c'è una possibilità che il mio stato di backup viva per lungo tempo (fino a quando i miei nagios suonano qualcuno da qualche parte per riparare il pg_stop_backup ()). Quindi se qualcosa di diverso in PostgreSQL tra questi due comandi mi piacerebbe conoscerlo, per capire quale impatto potrebbe avere.

Illuminami per favore.

Risposte:


7

Hai chiesto:

come postgreSQL gestirà il recupero con un contenuto pg_data contenente alcuni file che sono incoerenti.

pg_start_backup()assicurarsi che il file di dati sia nuovo almeno quanto il punto di controllo. Al ripristino, vengono applicati i registri.

Se i dati sono vecchi, il registro lo aggiornerà.

Se i dati sono nuovi, il registro avrà lo stesso contenuto. Non c'è male a scriverlo di nuovo.

I dati non sono mai più nuovi del registro, poiché i registri sono in anticipo (WAL).


Hai chiesto:

... xfs-freeze...

xfs-freezeè simile a pg_start_backup(), non ci vuole un'istantanea. È necessario un gestore di volumi per farlo.


Hai chiesto:

... perché creare tablespace e creare istruzioni di database non sono supportati se il WAL può riprodurre tutto?

È supportato, solo un po 'di gotcha. Vedi http://www.postgresql.org/docs/8.1/static/backup-online.html :

23.3.5. Avvertenze

I comandi CREATE TABLESPACE sono registrati da WAL con il percorso assoluto letterale e verranno quindi riprodotti come creazioni di tablespace con lo stesso percorso assoluto. Ciò potrebbe essere indesiderabile se il registro viene riprodotto su un altro computer. Può essere pericoloso anche se il registro viene riprodotto sullo stesso computer, ma in una nuova directory di dati: il replay sovrascriverà comunque il contenuto del tablespace originale. Per evitare potenziali gotcha di questo tipo, è consigliabile eseguire un nuovo backup di base dopo aver creato o eliminato i tablespace.


a proposito di xfs-freeze So che questo dipende anche da un gestore di volumi, era solo una parte della procedura di snapshot. ma siamo sicuri che il recupero WAL gestirà bene la riproduzione di registri di una tabella pre-vuoto su una tabella binaria post-vuoto? e il contenuto di global / pg_control è importante? perché creare tablespace e creare istruzioni di database non sono supportati se il WAL può riprodurre tutto?
regilero,

CREATE TABLESPACElavori. vedi risposta aggiornata. Non ne sono sicuro VACUUM, ma non riesco a immaginare perché non lo farà.
J-16 SDiZ,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.