2015-01-27 18 views
6

Mam problem z konfiguracją hot_standby PostgreSQL. Podczas próby uruchomienia bazy danych po uruchomieniu pg_basebackup, otrzymuję, FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 00000001000006440000008D has already been removed, w postgresql.log. Po krótkiej dyskusji na IRC zrozumiałem, że błąd prawdopodobnie pochodzi z zbyt niskiego ustawienia wal_keep_segments dla mojej bazy danych intensywnie zapisującej.Ustawianie parametrów wal_keep dla PostgreSQL hot_standby

Jak mogę obliczyć, jeśli to możliwe, właściwe ustawienie dla wal_keep_segments? Jaka jest dopuszczalna wartość dla tego ustawienia?

Co ja pracuję z:

  • Postgresql 9.3
  • Debianie 7,6

Odpowiedz

2

wal_keep_segments można oszacować jako średnią liczbę nowych segmentów WAL na minutę w katalogu pg_xlog pomnożonej przez liczba minut, przez które chcesz być bezpieczny. Należy pamiętać, że stawka prawdopodobnie wzrośnie po zmianie wartości wal_level z domyślnej wartości na minimal na archive lub hot_standby. Jedynym kosztem jest miejsce na dysku, które jak wiadomo domyślnie wynosi 16 MB na segment.

Zwykle używam uprawnień 2 jako wartości. Przy szybkości około 1 segmentu na minutę, wartość 256 daje mi około 4 godziny na skonfigurowanie trybu gotowości.

Można również rozważyć użycie strumieniowania WAL przy użyciu pg_basebackup. Jest to według jej opcji --xlog-method=stream. Niestety, co najmniej od 2013 roku, na discussion on a PostgreSQL mailing list, ustawienie wal_keep_segments na wartość niezerową może nadal być zalecane - ma to zapobiec ryzyku, że strumień nie będzie w stanie nadążyć. Jeśli jednak używasz pg_basebackup, nie zapomnij także o --checkpoint=fast.