Обсуждение: pgsql: Replace checkpoint_segments with min_wal_size and max_wal_size.

Поиск
Список
Период
Сортировка

pgsql: Replace checkpoint_segments with min_wal_size and max_wal_size.

От
Heikki Linnakangas
Дата:
Replace checkpoint_segments with min_wal_size and max_wal_size.

Instead of having a single knob (checkpoint_segments) that both triggers
checkpoints, and determines how many checkpoints to recycle, they are now
separate concerns. There is still an internal variable called
CheckpointSegments, which triggers checkpoints. But it no longer determines
how many segments to recycle at a checkpoint. That is now auto-tuned by
keeping a moving average of the distance between checkpoints (in bytes),
and trying to keep that many segments in reserve. The advantage of this is
that you can set max_wal_size very high, but the system won't actually
consume that much space if there isn't any need for it. The min_wal_size
sets a floor for that; you can effectively disable the auto-tuning behavior
by setting min_wal_size equal to max_wal_size.

The max_wal_size setting is now the actual target size of WAL at which a
new checkpoint is triggered, instead of the distance between checkpoints.
Previously, you could calculate the actual WAL usage with the formula
"(2 + checkpoint_completion_target) * checkpoint_segments + 1". With this
patch, you set the desired WAL usage with max_wal_size, and the system
calculates the appropriate CheckpointSegments with the reverse of that
formula. That's a lot more intuitive for administrators to set.

Reviewed by Amit Kapila and Venkata Balaji N.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/88e982302684246e8af785e78a467ac37c76dee9

Modified Files
--------------
doc/src/sgml/config.sgml                      |   40 +++-
doc/src/sgml/perform.sgml                     |   16 +-
doc/src/sgml/wal.sgml                         |   69 ++++---
src/backend/access/transam/xlog.c             |  262 ++++++++++++++++++++-----
src/backend/postmaster/checkpointer.c         |    6 +-
src/backend/utils/misc/guc.c                  |   30 ++-
src/backend/utils/misc/postgresql.conf.sample |    3 +-
src/include/access/xlog.h                     |    8 +-
src/include/utils/guc.h                       |    1 +
9 files changed, 327 insertions(+), 108 deletions(-)


Re: pgsql: Replace checkpoint_segments with min_wal_size and max_wal_size.

От
Stefan Kaltenbrunner
Дата:
On 02/23/2015 05:53 PM, Heikki Linnakangas wrote:
> Replace checkpoint_segments with min_wal_size and max_wal_size.
>
> Instead of having a single knob (checkpoint_segments) that both triggers
> checkpoints, and determines how many checkpoints to recycle, they are now
> separate concerns. There is still an internal variable called
> CheckpointSegments, which triggers checkpoints. But it no longer determines
> how many segments to recycle at a checkpoint. That is now auto-tuned by
> keeping a moving average of the distance between checkpoints (in bytes),
> and trying to keep that many segments in reserve. The advantage of this is
> that you can set max_wal_size very high, but the system won't actually
> consume that much space if there isn't any need for it. The min_wal_size
> sets a floor for that; you can effectively disable the auto-tuning behavior
> by setting min_wal_size equal to max_wal_size.
>
> The max_wal_size setting is now the actual target size of WAL at which a
> new checkpoint is triggered, instead of the distance between checkpoints.
> Previously, you could calculate the actual WAL usage with the formula
> "(2 + checkpoint_completion_target) * checkpoint_segments + 1". With this
> patch, you set the desired WAL usage with max_wal_size, and the system
> calculates the appropriate CheckpointSegments with the reverse of that
> formula. That's a lot more intuitive for administrators to set.
>
> Reviewed by Amit Kapila and Venkata Balaji N.

I think this one broke the docs build:


http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=guaibasaurus&dt=2015-02-23%2020%3A17%3A02


Stefan