Назад | Перейти на главную страницу

О параметре checkpoint_segments

Я не очень хорошо знаю параметр "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 - это почти ожидаемый минимум.