Обсуждение: BUG #3674: Unnecessary checkpoints by WAL Writer
The following bug has been logged online: Bug reference: 3674 Logged by: ITAGAKI Takahiro Email address: itagaki.takahiro@gmail.com PostgreSQL version: 8.3beta1 Operating system: independent Description: Unnecessary checkpoints by WAL Writer Details: WAL Writer requests unnecessary checkpoints with CHECKPOINT_CAUSE_XLOG. RedoRecPtr, declared in xlog.c, is initialized at StartupXLOG() but never updated in WAL Writer because it never calls XLogInsert(). It judges excess of segments wrongly. Though bgwriter also does not call XLogInsert(), but it would be OK because bgwriter updates RedoRecPtr in CreateCheckPoint().
"ITAGAKI Takahiro" <itagaki.takahiro@gmail.com> writes: > WAL Writer requests unnecessary checkpoints with CHECKPOINT_CAUSE_XLOG. > RedoRecPtr, declared in xlog.c, is initialized at StartupXLOG() but never > updated in WAL Writer because it never calls XLogInsert(). It judges excess > of segments wrongly. Good catch. I think the best fix for this is to make XLogWrite call GetRedoRecPtr and recheck the condition before actually sending a signal. regards, tom lane
On Fri, 2007-10-12 at 13:06 -0400, Tom Lane wrote: > "ITAGAKI Takahiro" <itagaki.takahiro@gmail.com> writes: > > WAL Writer requests unnecessary checkpoints with CHECKPOINT_CAUSE_XLOG. > > RedoRecPtr, declared in xlog.c, is initialized at StartupXLOG() but never > > updated in WAL Writer because it never calls XLogInsert(). It judges excess > > of segments wrongly. > > Good catch. I think the best fix for this is to make XLogWrite call > GetRedoRecPtr and recheck the condition before actually sending a > signal. Yes, very good catch, my bad. Thanks Itagaki. -- Simon Riggs 2ndQuadrant http://www.2ndQuadrant.com