On 24/04/18 21:00, Andres Freund wrote:
Right now if the queue is full and can't be compacted we end up
fsync()ing on every single write, rather than once per checkpoint
afaict. That's a fairly horrible.

For the case that there's no space in the map, I'd suggest to just do
10% or so of the fsync in the poor sod of a process that finds no
space. That's surely better than constantly fsyncing on every single
write.

Clever idea. In principle, you could do that even with the current queue, without changing it to a hash table.

Is this a problem in practice, though? I don't remember seeing any reports of the fsync queue filling up, after we got the code to compact it. I don't know if anyone has been looking for that, so that might also explain the absence of reports, though.

The fsync request queue often is fairly large. 20 bytes for each
shared_buffers isn't a neglebible overhead.

Ok, I guess that's a reason to do this, even if the current system works.

- Heikki

Reply via email to