Andres Freund wrote:
> Rework the way multixact truncations work.
I spent some time this morning reviewing this patch and had some
comments that I relayed over IM to Andres. The vast majority is
cosmetic, but there are two larger things:
1. I think this part of PerformMembersTruncation() is very confusing:
/* verify whether the current segment is to be deleted */ if (segment != startsegment && segment != endsegment)
SlruDeleteSegment(MultiXactMemberCtl, segment);
I think this works correctly in that it preserves both endpoint files,
but the files in between are removed ... which is a confusing interface,
IMO. I think this merits a longer explanation.
2. We set PGXACT->delayChkpt while the truncation is executed. This
seems reasonable, and there's a good reason for it, but all the other
users of this facility only do small operations with this thing grabbed,
while the multixact truncation could take a long time because a large
number of files might be deleted. Maybe it's not a problem to have
checkpoints be delayed by several seconds, or who knows maybe even a
minute in a busy system. (We will have checkpointer sleeping in 10ms
intervals until the truncation is complete).
Maybe this is fine, not sure.
--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services