PostgreSQL Source Code git master
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
pgstat_wal.c File Reference
#include "postgres.h"
#include "executor/instrument.h"
#include "utils/pgstat_internal.h"
Include dependency graph for pgstat_wal.c:

Go to the source code of this file.

Macros

#define WALSTAT_ACC(fld, var_to_add)    (stats_shmem->stats.wal_counters.fld += var_to_add.fld)
 

Functions

void pgstat_report_wal (bool force)
 
PgStat_WalStatspgstat_fetch_stat_wal (void)
 
static bool pgstat_wal_have_pending (void)
 
bool pgstat_wal_flush_cb (bool nowait)
 
void pgstat_wal_init_backend_cb (void)
 
void pgstat_wal_init_shmem_cb (void *stats)
 
void pgstat_wal_reset_all_cb (TimestampTz ts)
 
void pgstat_wal_snapshot_cb (void)
 

Variables

static WalUsage prevWalUsage
 

Macro Definition Documentation

◆ WALSTAT_ACC

#define WALSTAT_ACC (   fld,
  var_to_add 
)     (stats_shmem->stats.wal_counters.fld += var_to_add.fld)

Function Documentation

◆ pgstat_fetch_stat_wal()

PgStat_WalStats * pgstat_fetch_stat_wal ( void  )

Definition at line 67 of file pgstat_wal.c.

68{
70
71 return &pgStatLocal.snapshot.wal;
72}
void pgstat_snapshot_fixed(PgStat_Kind kind)
Definition: pgstat.c:1060
PgStat_LocalState pgStatLocal
Definition: pgstat.c:212
#define PGSTAT_KIND_WAL
Definition: pgstat_kind.h:40
PgStat_Snapshot snapshot
PgStat_WalStats wal

References PGSTAT_KIND_WAL, pgstat_snapshot_fixed(), pgStatLocal, PgStat_LocalState::snapshot, and PgStat_Snapshot::wal.

Referenced by pg_stat_get_wal().

◆ pgstat_report_wal()

void pgstat_report_wal ( bool  force)

Definition at line 46 of file pgstat_wal.c.

47{
48 bool nowait;
49
50 /* like in pgstat.c, don't wait for lock acquisition when !force */
51 nowait = !force;
52
53 /* flush wal stats */
54 (void) pgstat_wal_flush_cb(nowait);
56
57 /* flush IO stats */
58 pgstat_flush_io(nowait);
60}
bool pgstat_flush_backend(bool nowait, bits32 flags)
#define PGSTAT_BACKEND_FLUSH_IO
#define PGSTAT_BACKEND_FLUSH_WAL
void pgstat_flush_io(bool nowait)
Definition: pgstat_io.c:175
bool pgstat_wal_flush_cb(bool nowait)
Definition: pgstat_wal.c:91

References PGSTAT_BACKEND_FLUSH_IO, PGSTAT_BACKEND_FLUSH_WAL, pgstat_flush_backend(), pgstat_flush_io(), and pgstat_wal_flush_cb().

Referenced by BackgroundWriterMain(), CheckpointerMain(), summarizer_wait_for_wal(), WalReceiverMain(), and WalWriterMain().

◆ pgstat_wal_flush_cb()

bool pgstat_wal_flush_cb ( bool  nowait)

Definition at line 91 of file pgstat_wal.c.

92{
93 PgStatShared_Wal *stats_shmem = &pgStatLocal.shmem->wal;
94 WalUsage wal_usage_diff = {0};
95
97 Assert(pgStatLocal.shmem != NULL &&
99
100 /*
101 * This function can be called even if nothing at all has happened. Avoid
102 * taking lock for nothing in that case.
103 */
105 return false;
106
107 /*
108 * We don't update the WAL usage portion of the local WalStats elsewhere.
109 * Calculate how much WAL usage counters were increased by subtracting the
110 * previous counters from the current ones.
111 */
112 WalUsageAccumDiff(&wal_usage_diff, &pgWalUsage, &prevWalUsage);
113
114 if (!nowait)
115 LWLockAcquire(&stats_shmem->lock, LW_EXCLUSIVE);
116 else if (!LWLockConditionalAcquire(&stats_shmem->lock, LW_EXCLUSIVE))
117 return true;
118
119#define WALSTAT_ACC(fld, var_to_add) \
120 (stats_shmem->stats.wal_counters.fld += var_to_add.fld)
121 WALSTAT_ACC(wal_records, wal_usage_diff);
122 WALSTAT_ACC(wal_fpi, wal_usage_diff);
123 WALSTAT_ACC(wal_bytes, wal_usage_diff);
124 WALSTAT_ACC(wal_fpi_bytes, wal_usage_diff);
125 WALSTAT_ACC(wal_buffers_full, wal_usage_diff);
126#undef WALSTAT_ACC
127
128 LWLockRelease(&stats_shmem->lock);
129
130 /*
131 * Save the current counters for the subsequent calculation of WAL usage.
132 */
134
135 return false;
136}
bool IsUnderPostmaster
Definition: globals.c:120
bool IsPostmasterEnvironment
Definition: globals.c:119
Assert(PointerIsAligned(start, uint64))
WalUsage pgWalUsage
Definition: instrument.c:22
void WalUsageAccumDiff(WalUsage *dst, const WalUsage *add, const WalUsage *sub)
Definition: instrument.c:288
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition: lwlock.c:1174
void LWLockRelease(LWLock *lock)
Definition: lwlock.c:1894
bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode)
Definition: lwlock.c:1345
@ LW_EXCLUSIVE
Definition: lwlock.h:112
#define WALSTAT_ACC(fld, var_to_add)
static WalUsage prevWalUsage
Definition: pgstat_wal.c:30
static bool pgstat_wal_have_pending(void)
Definition: pgstat_wal.c:78
PgStat_ShmemControl * shmem
PgStatShared_Wal wal

References Assert(), PgStat_ShmemControl::is_shutdown, IsPostmasterEnvironment, IsUnderPostmaster, PgStatShared_Wal::lock, LW_EXCLUSIVE, LWLockAcquire(), LWLockConditionalAcquire(), LWLockRelease(), pgstat_wal_have_pending(), pgStatLocal, pgWalUsage, prevWalUsage, PgStat_LocalState::shmem, PgStat_ShmemControl::wal, WALSTAT_ACC, and WalUsageAccumDiff().

Referenced by pgstat_report_wal().

◆ pgstat_wal_have_pending()

static bool pgstat_wal_have_pending ( void  )
inlinestatic

Definition at line 78 of file pgstat_wal.c.

79{
81}
int64 wal_records
Definition: instrument.h:53

References pgWalUsage, prevWalUsage, and WalUsage::wal_records.

Referenced by pgstat_wal_flush_cb().

◆ pgstat_wal_init_backend_cb()

void pgstat_wal_init_backend_cb ( void  )

Definition at line 139 of file pgstat_wal.c.

140{
141 /*
142 * Initialize prevWalUsage with pgWalUsage so that pgstat_wal_flush_cb()
143 * can calculate how much pgWalUsage counters are increased by subtracting
144 * prevWalUsage from pgWalUsage.
145 */
147}

References pgWalUsage, and prevWalUsage.

◆ pgstat_wal_init_shmem_cb()

void pgstat_wal_init_shmem_cb ( void *  stats)

Definition at line 150 of file pgstat_wal.c.

151{
152 PgStatShared_Wal *stats_shmem = (PgStatShared_Wal *) stats;
153
154 LWLockInitialize(&stats_shmem->lock, LWTRANCHE_PGSTATS_DATA);
155}
void LWLockInitialize(LWLock *lock, int tranche_id)
Definition: lwlock.c:698

References PgStatShared_Wal::lock, and LWLockInitialize().

◆ pgstat_wal_reset_all_cb()

void pgstat_wal_reset_all_cb ( TimestampTz  ts)

Definition at line 158 of file pgstat_wal.c.

159{
160 PgStatShared_Wal *stats_shmem = &pgStatLocal.shmem->wal;
161
162 LWLockAcquire(&stats_shmem->lock, LW_EXCLUSIVE);
163 memset(&stats_shmem->stats, 0, sizeof(stats_shmem->stats));
164 stats_shmem->stats.stat_reset_timestamp = ts;
165 LWLockRelease(&stats_shmem->lock);
166}
PgStat_WalStats stats
TimestampTz stat_reset_timestamp
Definition: pgstat.h:490

References PgStatShared_Wal::lock, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), pgStatLocal, PgStat_LocalState::shmem, PgStat_WalStats::stat_reset_timestamp, PgStatShared_Wal::stats, and PgStat_ShmemControl::wal.

◆ pgstat_wal_snapshot_cb()

void pgstat_wal_snapshot_cb ( void  )

Variable Documentation

◆ prevWalUsage

WalUsage prevWalUsage
static