параметр checkpoint_completion_target игнорируется

#postgresql

Вопрос:

Я тестирую checkpoint_completion_target в RDS PostgreSQL и вижу, что контрольная точка занимает в общей сложности 28,5 секунды. Тем не менее, я настроил

 checkpoint_completion_target = 0.9
checkpoint_timeout = 300
 

В соответствии с этим, должна ли контрольная точка распространяться на 300*0,9, что составляет 270 секунд?
PostgreSQL версии 11.10

Лог:

 2021-03-19 16:06:47 UTC::@:[25023]:LOG:  checkpoint starting: time
2021-03-19 16:07:16 UTC::@:[25023]:LOG:  checkpoint complete: wrote 283 buffers (0.2%); 0 WAL file(s) added, 0 removed, 1 recycled; write=28.500 s, sync=0.006 s, total=28.533 s; sync files=56, longest=0.006 s, average=0.000 s; distance=64990 kB, estimate=68721 kB
 

Ответ №1:

Контрольный указатель реализует свое регулирование, отключаясь на 0,1 секунды. И нет никаких условий для записи более одного сна на буфер, который необходимо записать. Поэтому, если предстоит выполнить очень мало работы, она завершится рано, несмотря на настройку checkpoint_completion_target.

Комментарии:

1. Спасибо @jjanes . Просто для подтверждения я понимаю, что это зависит от доступности ресурсов, таких как процессор, память и ввод-вывод. Если в каком-либо из ресурсов есть разногласия, checkpointer реализует регулирование, чтобы распространить процесс на checkpoint_completion_target, и если разногласий нет, checkpointer завершает процесс как можно раньше. я прав?