Para responder diretamente à sua pergunta, por que mínimo e por que não máximo? Porque os novos segmentos WAL podem crescer mais rápido que o
RemoveOldXlogFiles(_logSegNo, recptr)
função pode excluir os antigos. Além disso, a fórmula para calcular o número provável de segmentos WAL nos documentos está errada. Eu sempre tenho alguns WALs a mais do que
checkpoint_segments + wal_keep_segments + 1
Uma fórmula muito mais precisa é esta:wal_keep_segments + 2 * checkpoint_segments + 1
Há um post antigo, mas muito bom sobre isso aqui:http://www.postgresql.org/message-id/[email protected]
Se você fizer inserções maciças, seus segmentos WAL crescerão mais rápido do que podem ser removidos. Isso me pegou apenas esta semana. Eu esperava que o pg_xlog mantivesse um tamanho relativamente constante. Houve um grande processo executado à noite e, quando cheguei ao trabalho na manhã seguinte, minha instância do postgres travou porque o volume que montei para colocar esses WALs estava completamente cheio. Postgres encheu o volume, tentou escrever ainda mais WALs, não conseguiu e morreu abruptamente. Felizmente, executamos réplicas atrás do pgpool2.
Se você tem uma mente curiosa, eu encorajo você a navegar no código-fonte do postgres. É gigante e em C, mas os comentários do código ajudam bastante. Este arquivo em particular é esclarecedor, pois aborda os detalhes de como o checkpoint funciona e como a remoção de segmentos WAL antigos acontece:https://github.com/postgres/postgres/blob/master/src/backend/access/transam/xlog.c