PostgreSQL Source Code git master
Loading...
Searching...
No Matches
pgstat_lock.c File Reference
#include "postgres.h"
#include "utils/pgstat_internal.h"
Include dependency graph for pgstat_lock.c:

Go to the source code of this file.

Macros

#define LOCKSTAT_ACC(fld)    (shstats->stats.stats[i].fld += PendingLockStats.stats[i].fld)
 

Functions

PgStat_Lockpgstat_fetch_stat_lock (void)
 
void pgstat_lock_flush (bool nowait)
 
bool pgstat_lock_flush_cb (bool nowait)
 
void pgstat_lock_init_shmem_cb (void *stats)
 
void pgstat_lock_reset_all_cb (TimestampTz ts)
 
void pgstat_lock_snapshot_cb (void)
 
void pgstat_count_lock_fastpath_exceeded (uint8 locktag_type)
 
void pgstat_count_lock_waits (uint8 locktag_type, long msecs)
 

Variables

static PgStat_PendingLock PendingLockStats
 
static bool have_lockstats = false
 

Macro Definition Documentation

◆ LOCKSTAT_ACC

#define LOCKSTAT_ACC (   fld)     (shstats->stats.stats[i].fld += PendingLockStats.stats[i].fld)

Function Documentation

◆ pgstat_count_lock_fastpath_exceeded()

void pgstat_count_lock_fastpath_exceeded ( uint8  locktag_type)

Definition at line 128 of file pgstat_lock.c.

129{
130 Assert(locktag_type <= LOCKTAG_LAST_TYPE);
132 have_lockstats = true;
133 pgstat_report_fixed = true;
134}
#define Assert(condition)
Definition c.h:943
#define LOCKTAG_LAST_TYPE
Definition locktag.h:52
bool pgstat_report_fixed
Definition pgstat.c:219
static bool have_lockstats
Definition pgstat_lock.c:23
static PgStat_PendingLock PendingLockStats
Definition pgstat_lock.c:22
PgStat_Counter fastpath_exceeded
Definition pgstat.h:353
PgStat_LockEntry stats[LOCKTAG_LAST_TYPE+1]
Definition pgstat.h:358

References Assert, PgStat_LockEntry::fastpath_exceeded, have_lockstats, LOCKTAG_LAST_TYPE, PendingLockStats, pgstat_report_fixed, and PgStat_PendingLock::stats.

Referenced by LockAcquireExtended().

◆ pgstat_count_lock_waits()

void pgstat_count_lock_waits ( uint8  locktag_type,
long  msecs 
)

Definition at line 143 of file pgstat_lock.c.

144{
145 Assert(locktag_type <= LOCKTAG_LAST_TYPE);
146 PendingLockStats.stats[locktag_type].waits++;
148 have_lockstats = true;
149 pgstat_report_fixed = true;
150}
int64 PgStat_Counter
Definition pgstat.h:71
static int fb(int x)
PgStat_Counter waits
Definition pgstat.h:351
PgStat_Counter wait_time
Definition pgstat.h:352

References Assert, fb(), have_lockstats, LOCKTAG_LAST_TYPE, PendingLockStats, pgstat_report_fixed, PgStat_PendingLock::stats, PgStat_LockEntry::wait_time, and PgStat_LockEntry::waits.

Referenced by ProcSleep().

◆ pgstat_fetch_stat_lock()

PgStat_Lock * pgstat_fetch_stat_lock ( void  )

Definition at line 26 of file pgstat_lock.c.

27{
29
31}
void pgstat_snapshot_fixed(PgStat_Kind kind)
Definition pgstat.c:1104
PgStat_LocalState pgStatLocal
Definition pgstat.c:213
#define PGSTAT_KIND_LOCK
Definition pgstat_kind.h:39
PgStat_Snapshot snapshot

References PgStat_Snapshot::lock, PGSTAT_KIND_LOCK, pgstat_snapshot_fixed(), pgStatLocal, and PgStat_LocalState::snapshot.

Referenced by pg_stat_get_lock().

◆ pgstat_lock_flush()

void pgstat_lock_flush ( bool  nowait)

Definition at line 37 of file pgstat_lock.c.

38{
39 (void) pgstat_lock_flush_cb(nowait);
40}
bool pgstat_lock_flush_cb(bool nowait)
Definition pgstat_lock.c:51

References fb(), and pgstat_lock_flush_cb().

◆ pgstat_lock_flush_cb()

bool pgstat_lock_flush_cb ( bool  nowait)

Definition at line 51 of file pgstat_lock.c.

52{
55
56 if (!have_lockstats)
57 return false;
58
61
62 if (!nowait)
65 return true;
66
67 for (int i = 0; i <= LOCKTAG_LAST_TYPE; i++)
68 {
69#define LOCKSTAT_ACC(fld) \
70 (shstats->stats.stats[i].fld += PendingLockStats.stats[i].fld)
71 LOCKSTAT_ACC(waits);
72 LOCKSTAT_ACC(wait_time);
73 LOCKSTAT_ACC(fastpath_exceeded);
74#undef LOCKSTAT_ACC
75 }
76
78
80 have_lockstats = false;
81
82 return false;
83}
int i
Definition isn.c:77
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition lwlock.c:1150
void LWLockRelease(LWLock *lock)
Definition lwlock.c:1767
bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode)
Definition lwlock.c:1321
@ LW_EXCLUSIVE
Definition lwlock.h:104
#define LOCKSTAT_ACC(fld)
PgStat_ShmemControl * shmem
PgStatShared_Lock lock

References fb(), have_lockstats, i, PgStatShared_Lock::lock, PgStat_ShmemControl::lock, LOCKSTAT_ACC, LOCKTAG_LAST_TYPE, LW_EXCLUSIVE, LWLockAcquire(), LWLockConditionalAcquire(), LWLockRelease(), PendingLockStats, pgStatLocal, and PgStat_LocalState::shmem.

Referenced by pgstat_lock_flush().

◆ pgstat_lock_init_shmem_cb()

void pgstat_lock_init_shmem_cb ( void stats)

Definition at line 86 of file pgstat_lock.c.

87{
89
91}
void LWLockInitialize(LWLock *lock, int tranche_id)
Definition lwlock.c:670

References fb(), and LWLockInitialize().

◆ pgstat_lock_reset_all_cb()

◆ pgstat_lock_snapshot_cb()

Variable Documentation

◆ have_lockstats

bool have_lockstats = false
static

◆ PendingLockStats

PgStat_PendingLock PendingLockStats
static