Azzeramento dei segmenti WAL in Postgres


9

Disponiamo di un database Postgres a volume relativamente basso con archiviazione continua impostata per comprimere ogni segmento WAL e inviarlo a S3. Poiché è un sistema a basso volume, raggiunge circa archive_timeoutogni 10 minuti circa e archivia il segmento WAL per lo più inutilizzato, che era solito comprimere molto bene dato che era per lo più solo azzerato.

Tuttavia, Postgres ricicla i suoi segmenti WAL per evitare il costo di allocazione di nuovi file su ogni switch WAL, il che è utile in una situazione di carico elevato ma significa che dopo un'esplosione di attività più pesante del normale i nostri file di segmenti WAL sono ora pieni di spazzatura dai segmenti precedenti e non si comprime molto bene. Conserviamo molte copie di tutta questa spazzatura.

C'è un modo per ridurre la quantità di spazio che stiamo usando per conservare il nostro archivio WAL? Alcune possibilità non ottimali:

  1. Impedisci a Postgres di riciclare i segmenti WAL in qualche modo, quindi inizia ogni volta con un file azzerato. I documenti non indicano che esiste un'opzione per farlo, ma potrei averlo perso.

  2. Chiedi a Postgres di azzerare il file del segmento WAL quando inizia / finisce di usarlo. Ancora una volta, i documenti non sembrano suggerire che ciò sia possibile.

  3. Azzerare o rimuovere esternamente alcuni file del segmento WAL mentre non sono in uso. C'è un modo sicuro per determinare di quali file si tratta?

  4. Azzera la parte inutilizzata del segmento prima di archiviarlo utilizzando l'output da pg_xlogdumpper trovare dove inizia la spazzatura. Possibile, anche se non mi piace. Almeno facendo questo nel comando archivio puoi essere sicuro che Postgres non riutilizzerà il file.

  5. Archivia solo la parte utilizzata del file del segmento, sempre interpretando l'output di in pg_xlogdumpqualche modo, quindi riempilo di zero durante il ripristino. Sembra anche possibile, anche se non mi piace davvero.


Problema interessante. Posso chiederti per quale archiviazione continua stai utilizzando?
dezso,

@dezso Nonostante il basso tasso di abbandono, è considerato molto importante ridurre il rischio di perdere il più possibile questi dati e avere una pista di controllo delle modifiche apportate. L'archiviazione WAL è un'ultima linea di difesa (ci sono anche altri meccanismi in gioco), quindi mantenerlo economico sarebbe un bene.
Dave Turner,

Risposte:


5

A partire dalla versione 9.4, ora azzera automaticamente la fine del file WAL. (In realtà è solo per lo più zero, ci sono alcune intestazioni di blocco che non vengono azzerate, ma il risultato è molto comprimibile).

Nella versione 9.2, c'è un programma chiamato pg_clearxlogtailche puoi usare. Puoi aggiungerlo al tuo archivio_comando prima del passaggio di compressione.

Se stai usando 9.3, sei sfortunato.

Si noti che i checkpoint non causano intrinsecamente opzioni per i file di registro. Probabilmente è archive_timeout che sta causando gli switch.


D'oh. Sì, siamo al 9.3, quindi sono passati attraverso la crepa tra queste due soluzioni. E sì, scusa, hai ragione, è la archive_timeoutcausa degli interruttori. Corretto l'OP, grazie.
Dave Turner,
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.