Контрольные точки (Checkpoints)   

   
Контрольные точки (Checkpoints)

Когда журнал транзакций полностью заполняется, происходит установление т.н. контрольной точки. Для системы это является указанием сбросить на диск все <грязные> буферы, чтобы журнал мог быть использован далее. Также контрольная точка может быть установлена не по событию, а через определенный интервал времени, обычно равный 5 минутам. При очень активных операциях записи в базу данных журнал транзакций может заполняться слишком быстро, что в результате вызовет значительное замедление при сбросе вышеупомянутых буферов на дисковый носитель.

Определение частоты установления Контрольных точек

Установка контрольных точек обязана осуществляться каждые несколько минут. Если эта операция производится слишком часто (например - несколько раз в минуту), производительность системы значительно понизится. Для определения реальной частоты, с которой система устанавливает контрольные точки, вы можете воспользоваться анализом лога временных отметок (timestamps). Но сперва удостоверьтесь, что вы разрешили запись в этот лог - проверьте следующую опцию в конфигурационном файле postgresql.conf:

log_timestamp = true

После этого изменения файл конфигурации будет автоматически перечитан, и вы сможете наблюдать в логе файле сервера PostgreSQL следующие записи:

2002-02-11 21:17:32 LOG: recycled transaction log file 0000000000000000
2002-02-11 21:17:33 LOG: recycled transaction log file 0000000000000001
2002-02-11 21:17:33 LOG: recycled transaction log file 0000000000000002
2002-02-11 21:18:13 LOG: recycled transaction log file 0000000000000003
2002-02-11 21:18:13 LOG: recycled transaction log file 0000000000000004
2002-02-11 21:18:13 LOG: recycled transaction log file 0000000000000005


Оцените период между двумя контрольными точками. Это позволит вам определить их частоту. В приведенном выше примере вы можете увидеть, что контрольные точки производились каждые 40 секунд, что является слишком частой операцией, и что замедляет производительность системы в целом. Кстати, не удивляйтесь, обнаружив записи с одной и той же временной отметкой (см. выше). Зачастую одна и та же контрольная точка записывается в лог несколько раз.

Уменьшение частоты установки Контрольных точек

Уменьшение частоты Контрольных точек приводит к увеличению числа файлов упреждающего кэширования, создающихся в data/pg_xlog. Каждый файл имеет размер 16 мегабайт, что в итоге может значительно повлиять на общее свободное место на диске. Установка по умолчанию подразумевает минимизацию числа таких файлов. Для уменьшения частоты контрольных точек вам следует изменить следующий параметр:

checkpoint_segments = 3

Его первоначальное значение равно 3. Постепенно увеличивайте это значение до тех пор, пока интервал между контрольными точками не станет равняться нескольким минутам. Следующая запись в логе, которую вы сможете наблюдать, может быть такой:

LOG: XLogWrite: new log file created - consider increasing WAL_FILES

Это означает, что параметр wal_files требует увеличения в файле postgresql.conf.



Оглавление                                                                                                Читать дальше...