sql >> Database teknologi >  >> RDS >> PostgreSQL

wal_keep_segments hvorfor minimum, ikke maksimum?

For at besvare dit spørgsmål direkte, hvorfor minimum og hvorfor ikke maksimum? Fordi de nye WAL-segmenter kan vokse hurtigere end RemoveOldXlogFiles(_logSegNo, recptr) funktion kan slette de gamle.

Formlen til beregning af det sandsynlige antal WAL-segmenter i dokumenterne er også forkert. Jeg har altid et par flere WAL'er end checkpoint_segments + wal_keep_segments + 1 En meget mere præcis formel er denne:wal_keep_segments + 2 * checkpoint_segments + 1

Der er et gammeldags, men rigtig godt indlæg om dette her:http://www.postgresql.org/message-id/[email protected]

Hvis du laver massive indsatser, vil dine WAL-segmenter vokse hurtigere, end de kan fjernes. Det fik mig lige i denne uge. Jeg forventede, at pg_xlog ville opretholde en relativt konstant størrelse. Der var en stor proces, der kørte om natten, og da jeg kom på arbejde den følgende morgen, styrtede min postgres-instans ned, fordi den lydstyrke, jeg monterede for at plappe disse WAL'er på, var fuldstændig fuld. Postgres fyldte volumen, forsøgte at skrive endnu flere WAL'er, kunne ikke og døde brat. Heldigvis kører vi replikaer bag pgpool2.

Hvis du har et nysgerrigt sind, opfordrer jeg dig til at gennemse postgres-kildekoden. Det er kæmpestort og i C, men kodekommentarerne hjælper virkelig. Især denne fil er oplysende, da den kommer ind på møtrikker og bolte for, hvordan checkpointing fungerer, og hvordan fjernelse af gamle WAL-segmenter sker:https://github.com/postgres/postgres/blob/master/src/backend/access/transam/xlog.c



  1. SQL flere kolonner i IN-sætning

  2. Ring til Postgres SQL lagret procedure fra Django

  3. mysql Ugyldigt kolonneantal i CSV-input under import af csv-fil

  4. Postgresql:Forespørgsel returnerer forkerte data