PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

wal_keep_segments dlaczego minimum, a nie maksimum?

Aby odpowiedzieć bezpośrednio na twoje pytanie, dlaczego minimum, a dlaczego nie maksimum? Ponieważ nowe segmenty WAL mogą rosnąć szybciej niż RemoveOldXlogFiles(_logSegNo, recptr) funkcja może usunąć stare.

Również formuła obliczania prawdopodobnej liczby segmentów WAL w dokumentach jest błędna. Zawsze mam o kilka WAL więcej niż checkpoint_segments + wal_keep_segments + 1 O wiele dokładniejsza formuła jest następująca:wal_keep_segments + 2 * checkpoint_segments + 1

Tutaj jest stary, ale naprawdę dobry post:http://www.postgresql.org/identyfikator-wiadomości/[email protected]

Jeśli robisz masywne wkładki, twoje segmenty WAL będą rosły szybciej, niż można je usunąć. To dostało mnie w tym tygodniu. Spodziewałem się, że pg_xlog utrzyma względnie stały rozmiar. W nocy był uruchomiony duży proces, a gdy następnego ranka dotarłem do pracy, moja instancja postgres uległa awarii, ponieważ wolumin, na którym zamontowałem te WAL-y, był całkowicie pełny. Postgres wypełnił tom, próbował napisać jeszcze więcej WAL-ów, nie mógł i nagle zmarł. Na szczęście uruchamiamy repliki za pgpool2.

Jeśli masz ciekawy umysł, zachęcam do przejrzenia kodu źródłowego postgresa. Jest gigantyczny i w C, ale komentarze do kodu naprawdę pomagają. W szczególności ten plik jest pouczający, gdy wchodzi w szczegóły działania punktów kontrolnych i usuwania starych segmentów WAL:https://github.com/postgres/postgres/blob/master/src/backend/access/transam/xlog.c



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres UUID i Hibernate → nie znaleziono kolumny

  2. Dołącz do dwóch tabel na podstawie pobliskich znaczników czasu

  3. Dlaczego podczas sprawdzania typu wiersza jest NOT NULL false?

  4. Całkowite kopiowanie tabeli postgres za pomocą SQL

  5. Rekordy oparte na kursorach w PostgreSQL