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