Thread

  1. Is it possible for a WAL file to be missing records?

    와따가따 <lght2000@gmail.com> — 2025-03-09T07:55:48Z

    PostgreSQL version and HA extension in use
    - PostgreSQL 13.10 version
    - pg_auto_failover 2.0
    
    CPU usage and load were increasing due to high load.
    
    Failover was performed while a large number of WALwrite events occurred in
    the primary DB.
    
    I confirmed that the part where the secondary was not promoted was a
    pg_auto_failover issue.
    
    I promoted the secondary manually.
    
    And I originally tried to make the primary DB a new secondary using the
    archived wal file, but there seemed to be a missing WAL record.
    
    So, I opened the WAL file using pg_waldump and there was a missing record.
    
    It was not a DB server crash.
    Can records not be recorded in the WAL file even when a failover is
    performed due to high load?
    
    I'm wondering if this could be considered a bug or if it was a situation
    where WAL records could be lost.
    
    I will send you the information confirmed through DB log and pg_waldump.
    
    I'll share some DB settings too.
    hot_standby_feedback = on
    hot_standby = on
    synchronous_commit = on
    wal_writer_flush_after = 1MB
    wal_sync_method = fdatasync
    wal_writer_delay = 200ms
    wal_buffers = 16MB
    wal_segment_size= 16MB
    
    *[When the first failover occurs]*
    *- WAL apply DB log*
    [image: image.png]
    *- Check the wal record using pg_waldump*
    I verified that there are no missing lsn in 0000000300005015000000A6 and
    0000000300005015000000A7.
    However, the prev lsn shown in 0000000300005015000000A8 is not found in
    0000000300005015000000A7.
        - The last LSN of 0000000300005015000000A7 is 5015/A6003778
        -The prev LSN of the first record of 0000000300005015000000A8 is
    5015/A7FFED78.
    [image: image.png]
    
    *[When the second failover occurs]*
    *- DB log*
    [image: image.png]
    
    - Check the wal record using pg_waldump
    The last LSN of 000000030000501E0000008E is 501E/8EFFCED8.
    The prev lsn of the first record in 000000030000501E0000008F wal file is
    501E/8EFFEEC8.
    It appears to have been lost due to the large difference in LSN.
    
    [image: image.png]