xlog: bufixes for pg_stat_wal.
authorAndres Freund <andres@anarazel.de>
Mon, 11 Jan 2021 22:52:32 +0000 (14:52 -0800)
committerAndres Freund <andres@anarazel.de>
Mon, 11 Jan 2021 23:09:14 +0000 (15:09 -0800)
Fixes: 01469241b2ff6f17fc0b3f20f01559145ffab29e
Author:
Reviewed-By:
Discussion: https://postgr.es/m/
Backpatch:

src/backend/access/transam/xlog.c
src/backend/executor/instrument.c
src/backend/postmaster/pgstat.c
src/backend/postmaster/walwriter.c
src/include/executor/instrument.h

index b18257c1980784385062de95119ea76875c9d9fd..02a1c10c03424338b4e9d31255e761db08c48f14 100644 (file)
@@ -2208,7 +2208,7 @@ AdvanceXLInsertBuffer(XLogRecPtr upto, bool opportunistic)
                    WriteRqst.Flush = 0;
                    XLogWrite(WriteRqst, false);
                    LWLockRelease(WALWriteLock);
-                   WalStats.m_wal_buffers_full++;
+                   pgWalUsage.wal_buffers_full++;
                    TRACE_POSTGRESQL_WAL_BUFFER_WRITE_DIRTY_DONE();
                }
                /* Re-acquire WALBufMappingLock and retry */
index 237e13361b5d08a682fb80d87e61713d46903975..677b1c3a77d2d6bff8a0c7c6f95a8f068b4eb816 100644 (file)
@@ -249,6 +249,7 @@ WalUsageAdd(WalUsage *dst, WalUsage *add)
    dst->wal_bytes += add->wal_bytes;
    dst->wal_records += add->wal_records;
    dst->wal_fpi += add->wal_fpi;
+   dst->wal_buffers_full += add->wal_buffers_full;
 }
 
 void
@@ -257,4 +258,5 @@ WalUsageAccumDiff(WalUsage *dst, const WalUsage *add, const WalUsage *sub)
    dst->wal_bytes += add->wal_bytes - sub->wal_bytes;
    dst->wal_records += add->wal_records - sub->wal_records;
    dst->wal_fpi += add->wal_fpi - sub->wal_fpi;
+   dst->wal_buffers_full += add->wal_buffers_full - sub->wal_buffers_full;
 }
index 3f24a33ef1da455fc7ba41a07fa4247924283ce8..5b66808a170635a4ed510379e89dbfff5db0dd65 100644 (file)
@@ -4611,6 +4611,7 @@ pgstat_send_wal(void)
    WalStats.m_wal_records = walusage.wal_records;
    WalStats.m_wal_fpi = walusage.wal_fpi;
    WalStats.m_wal_bytes = walusage.wal_bytes;
+   WalStats.m_wal_buffers_full = walusage.wal_buffers_full;
 
    /*
     * This function can be called even if nothing at all has happened. In
index 4f1a8e356b96f624d2a7ce2e0cc47df8a8d54c6d..959004b828b8def607a804418fee2266851233ca 100644 (file)
@@ -253,6 +253,8 @@ WalWriterMain(void)
        else if (left_till_hibernate > 0)
            left_till_hibernate--;
 
+       pgstat_send_wal();
+
        /*
         * Sleep until we are signaled or WalWriterDelay has elapsed.  If we
         * haven't done anything useful for quite some time, lengthen the
index aa8eceda5f411aac88cde1c559435e35021fa442..9d90212565dcd817fd9610e359686154fcb89950 100644 (file)
@@ -37,6 +37,7 @@ typedef struct WalUsage
    long        wal_records;    /* # of WAL records produced */
    long        wal_fpi;        /* # of WAL full page images produced */
    uint64      wal_bytes;      /* size of WAL records produced */
+   uint64      wal_buffers_full;
 } WalUsage;
 
 /* Flag bits included in InstrAlloc's instrument_options bitmask */