mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Rename wal_keep_segments to wal_keep_size.
max_slot_wal_keep_size that was added in v13 and wal_keep_segments are the GUC parameters to specify how much WAL files to retain for the standby servers. While max_slot_wal_keep_size accepts the number of bytes of WAL files, wal_keep_segments accepts the number of WAL files. This difference of setting units between those similar parameters could be confusing to users. To alleviate this situation, this commit renames wal_keep_segments to wal_keep_size, and make users specify the WAL size in it instead of the number of WAL files. There was also the idea to rename max_slot_wal_keep_size to max_slot_wal_keep_segments, in the discussion. But we have been moving away from measuring in segments, for example, checkpoint_segments was replaced by max_wal_size. So we concluded to rename wal_keep_segments to wal_keep_size. Back-patch to v13 where max_slot_wal_keep_size was added. Author: Fujii Masao Reviewed-by: Álvaro Herrera, Kyotaro Horiguchi, David Steele Discussion: https://postgr.es/m/574b4ea3-e0f9-b175-ead2-ebea7faea855@oss.nttdata.com
This commit is contained in:
@ -88,7 +88,7 @@ extern uint32 bootstrap_data_checksum_version;
|
||||
/* User-settable parameters */
|
||||
int max_wal_size_mb = 1024; /* 1 GB */
|
||||
int min_wal_size_mb = 80; /* 80 MB */
|
||||
int wal_keep_segments = 0;
|
||||
int wal_keep_size_mb = 0;
|
||||
int XLOGbuffers = -1;
|
||||
int XLogArchiveTimeout = 0;
|
||||
int XLogArchiveMode = ARCHIVE_MODE_OFF;
|
||||
@ -9523,7 +9523,7 @@ GetWALAvailability(XLogRecPtr targetLSN)
|
||||
|
||||
/*
|
||||
* Calculate the oldest segment currently reserved by all slots,
|
||||
* considering wal_keep_segments and max_slot_wal_keep_size. Initialize
|
||||
* considering wal_keep_size and max_slot_wal_keep_size. Initialize
|
||||
* oldestSlotSeg to the current segment.
|
||||
*/
|
||||
currpos = GetXLogWriteRecPtr();
|
||||
@ -9574,9 +9574,9 @@ GetWALAvailability(XLogRecPtr targetLSN)
|
||||
|
||||
/*
|
||||
* Retreat *logSegNo to the last segment that we need to retain because of
|
||||
* either wal_keep_segments or replication slots.
|
||||
* either wal_keep_size or replication slots.
|
||||
*
|
||||
* This is calculated by subtracting wal_keep_segments from the given xlog
|
||||
* This is calculated by subtracting wal_keep_size from the given xlog
|
||||
* location, recptr and by making sure that that result is below the
|
||||
* requirement of replication slots. For the latter criterion we do consider
|
||||
* the effects of max_slot_wal_keep_size: reserve at most that much space back
|
||||
@ -9614,14 +9614,20 @@ KeepLogSeg(XLogRecPtr recptr, XLogSegNo *logSegNo)
|
||||
}
|
||||
}
|
||||
|
||||
/* but, keep at least wal_keep_segments if that's set */
|
||||
if (wal_keep_segments > 0 && currSegNo - segno < wal_keep_segments)
|
||||
/* but, keep at least wal_keep_size if that's set */
|
||||
if (wal_keep_size_mb > 0)
|
||||
{
|
||||
/* avoid underflow, don't go below 1 */
|
||||
if (currSegNo <= wal_keep_segments)
|
||||
segno = 1;
|
||||
else
|
||||
segno = currSegNo - wal_keep_segments;
|
||||
uint64 keep_segs;
|
||||
|
||||
keep_segs = ConvertToXSegs(wal_keep_size_mb, wal_segment_size);
|
||||
if (currSegNo - segno < keep_segs)
|
||||
{
|
||||
/* avoid underflow, don't go below 1 */
|
||||
if (currSegNo <= keep_segs)
|
||||
segno = 1;
|
||||
else
|
||||
segno = currSegNo - keep_segs;
|
||||
}
|
||||
}
|
||||
|
||||
/* don't delete WAL segments newer than the calculated segment */
|
||||
@ -11336,7 +11342,7 @@ do_pg_stop_backup(char *labelfile, bool waitforarchive, TimeLineID *stoptli_p)
|
||||
* If archiving is enabled, wait for all the required WAL files to be
|
||||
* archived before returning. If archiving isn't enabled, the required WAL
|
||||
* needs to be transported via streaming replication (hopefully with
|
||||
* wal_keep_segments set high enough), or some more exotic mechanism like
|
||||
* wal_keep_size set high enough), or some more exotic mechanism like
|
||||
* polling and copying files from pg_wal with script. We have no knowledge
|
||||
* of those mechanisms, so it's up to the user to ensure that he gets all
|
||||
* the required WAL.
|
||||
|
Reference in New Issue
Block a user