2015-01-27 5 views
6

Ho difficoltà a configurare PostgreSQL hot_standby. Quando si tenta di avviare il database dopo aver eseguito pg_basebackup, ricevo, FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 00000001000006440000008D has already been removed, nel postgresql.log. Dopo una breve discussione in IRC, sono giunto alla conclusione che l'errore probabilmente deriva da un'impostazione wal_keep_segments troppo bassa per il mio database di scrittura intensiva.Impostazione wal_keep_segments per PostgreSQL hot_standby

Come posso calcolare, se possibile, l'impostazione corretta per wal_keep_segments? Qual è un valore accettabile per questa impostazione?

Quello che sto lavorando con:

  • PostgreSQL 9.3
  • Debian 7,6

risposta

2

wal_keep_segments potrebbe essere stimato come il numero medio di nuovi segmenti di WAL al minuto nella directory pg_xlog moltiplicato per il numero di minuti attraverso i quali vuoi essere sicuro. Tenere presente che la velocità è prevista aumentare dopo che wal_level viene modificato dal valore predefinito di minimal a archive o hot_standby. L'unico costo è lo spazio su disco, che come sai è di 16 MB per segmento.

In genere utilizzo le potenze di 2 come valori. Alla velocità di circa 1 segmento al minuto, un valore di 256 mi dà circa 4 ore in cui impostare lo standby.

In alternativa, è possibile considerare l'utilizzo dello streaming WAL con pg_basebackup. Questo è per la sua opzione --xlog-method=stream. Sfortunatamente, almeno dal 2013, per uno discussion on a PostgreSQL mailing list, è comunque consigliabile consigliare l'impostazione di wal_keep_segments su un valore diverso da zero, per evitare che il flusso non possa essere mantenuto attivo. Se si utilizza pg_basebackup, anche non dimenticare --checkpoint=fast.