Re: Clean shutdown and warm standby

From: Fujii Masao <masao(dot)fujii(at)gmail(dot)com>
To: Heikki Linnakangas <heikki(dot)linnakangas(at)enterprisedb(dot)com>
Cc: Guillaume Smet <guillaume(dot)smet(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Clean shutdown and warm standby
Date: 2009-04-27 13:15:37
Message-ID: 3f0b79eb0904270615y66f8c4demc4baec528dfbb3ce@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On Mon, Apr 27, 2009 at 10:02 PM, Heikki Linnakangas
<heikki(dot)linnakangas(at)enterprisedb(dot)com> wrote:
> Fujii Masao wrote:
>>
>> Hi,
>>
>> On Mon, Apr 27, 2009 at 8:43 PM, Heikki Linnakangas
>> <heikki(dot)linnakangas(at)enterprisedb(dot)com> wrote:
>>>
>>> Fujii Masao wrote:
>>>>
>>>> On Fri, Apr 24, 2009 at 3:20 PM, Heikki Linnakangas
>>>> <heikki(dot)linnakangas(at)enterprisedb(dot)com> wrote:
>>>>>
>>>>> It's not safe to write WAL after the checkpoint, as RequestXLogSwitch()
>>>>> does. After restart, the system will start inserting WAL from the
>>>>> checkpoint
>>>>> redo point, which is just before the XLOG_SWITCH record, and will
>>>>> overwrite
>>>>> it.
>>>>
>>>> Since, in this case, the WAL file including XLOG_SWITCH exists
>>>> in archive, I don't think that it's unsafe, i.e. XLOG_SWITCH would
>>>> be treated as the last applied record and not be overwritten. WAL
>>>> records would start to be inserted from the subsequent file (with
>>>> new timeline).
>>>
>>> It will be overwritten in a normal non-archive-recovery startup.
>>
>> Hmm, you mean the case where the system crashes after
>> inserting XLOG_SWITCH and before archiving the WAL file
>> containing it?
>
> No, no crash is involved. Just a normal server shutdown and start:
>
> 1. Server shutdown is initiated
> 2. A shutdown checkpoint is recorded at XLOG point 1234, redo ptr is also
> 1234.
> 3. A XLOG_SWITCH record is written at 1235, right after the checkpoint
> record.
> 4. The last round of archiving is done. The partial WAL file containing the
> checkpoint and XLOG_SWITCH record is archived.
> 5. Postmaster exits.
>
> 6. Postmaster is started again. Since the system was shut down cleanly, no
> WAL recovery is done. The WAL insert pointer is initialized to right after
> the redo pointer, location 1235, which is also the location of the
> XLOG_SWITCH record.
> 7. The next WAL record written will be written at 1235, overwriting the
> XLOG_SWITCH record.
> 8. When the WAL file fills up, the system will try to archive the same WAL
> file again, this time with additional WAL records that after the checkpoint
> record.

Oh, you are right. I've missed that case :(

Thanks for the detailed description!

Regards,

--
Fujii Masao
NIPPON TELEGRAPH AND TELEPHONE CORPORATION
NTT Open Source Software Center

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Fujii Masao 2009-04-27 13:38:33 Re: Synchronous replication: psqlODBC driver compilation
Previous Message Heikki Linnakangas 2009-04-27 13:02:19 Re: Clean shutdown and warm standby