Я не очень хорошо знаю параметр "checkpoint_segments". Лично я считаю, что он означает количество файлов журнала wal; Я настроил значение параметра на 64, но я вижу 131 файл в каталоге pg_xlog.
Может кто-нибудь объяснить параметр?
--detail
postgres=# show checkpoint_segments;
checkpoint_segments
---------------------
64
(1 row)
[postgres@pg_root]$ cd $PGDATA
[postgres@pg_root]$ ls -lrt pg_xlog | wc -l
132
Для фона: WAL (ведение журнала с упреждающей записью) - это механизм, обеспечивающий возможность восстановления базы данных в случае сбоя без необходимости очистки файлов данных после каждой записи. Обычно, прежде чем любое изменение записывается в файлы данных, оно сначала регистрируется. В случае сбоя журнал можно использовать для повторения любых изменений, которые не были записаны на диск.
Каждый файл в pg_xlog - это сегмент WAL. checkpoint_segments
, вместе с checkpoint_timeout
, контролирует выполнение контрольной точки WAL (контрольная точка выполняется после checkpoint_segments
сегменты были заполнены или checkpoint_timeout
прошло несколько секунд, в зависимости от того, что наступит раньше); Контрольная точка - это момент времени, когда гарантируется, что файлы данных были сброшены, поэтому процессу повтора не нужно учитывать какие-либо транзакции в журнале до контрольной точки.
В соответствии с документация (откуда я скопировал большую часть вышеперечисленного), до версии 8.3 обычно 2 * checkpoint_segments + 1
файлы сегментов в каталоге pg_xlog; начиная с версии 8.3 ожидаемое число (2 + checkpoint_completion_target) * checkpoint_segments + 1
(или wal_keep_segments
в 9.0, если он больше). В любом случае 131 сегментный файл для checkpoint_segments
64 - это почти ожидаемый минимум.