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)    (lck_shstats->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)     (lck_shstats->fld += PendingLockStats.stats[i].fld)

Function Documentation

◆ pgstat_count_lock_fastpath_exceeded()

void pgstat_count_lock_fastpath_exceeded ( uint8  locktag_type)

Definition at line 156 of file pgstat_lock.c.

157{
158 Assert(locktag_type <= LOCKTAG_LAST_TYPE);
160 have_lockstats = true;
161 pgstat_report_fixed = true;
162}
#define Assert(condition)
Definition c.h:945
#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 171 of file pgstat_lock.c.

172{
173 Assert(locktag_type <= LOCKTAG_LAST_TYPE);
174 PendingLockStats.stats[locktag_type].waits++;
176 have_lockstats = true;
177 pgstat_report_fixed = true;
178}
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:1088
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 bool lock_not_acquired = false;
56
57 if (!have_lockstats)
58 return false;
59
60 for (int i = 0; i <= LOCKTAG_LAST_TYPE; i++)
61 {
65
66 if (!nowait)
69 {
70 lock_not_acquired = true;
71 continue;
72 }
73
74#define LOCKSTAT_ACC(fld) \
75 (lck_shstats->fld += PendingLockStats.stats[i].fld)
76 LOCKSTAT_ACC(waits);
77 LOCKSTAT_ACC(wait_time);
78 LOCKSTAT_ACC(fastpath_exceeded);
79#undef LOCKSTAT_ACC
80
82 }
83
85
86 have_lockstats = false;
87
88 return lock_not_acquired;
89}
int i
Definition isn.c:77
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
Definition lwlock.c:1177
void LWLockRelease(LWLock *lock)
Definition lwlock.c:1794
bool LWLockConditionalAcquire(LWLock *lock, LWLockMode mode)
Definition lwlock.c:1348
@ LW_EXCLUSIVE
Definition lwlock.h:112
#define LOCKSTAT_ACC(fld)
LWLock locks[LOCKTAG_LAST_TYPE+1]
PgStat_ShmemControl * shmem
PgStat_LockEntry stats[LOCKTAG_LAST_TYPE+1]
Definition pgstat.h:364
PgStatShared_Lock lock

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

Referenced by pgstat_lock_flush().

◆ pgstat_lock_init_shmem_cb()

void pgstat_lock_init_shmem_cb ( void stats)

Definition at line 93 of file pgstat_lock.c.

94{
96
97 for (int i = 0; i <= LOCKTAG_LAST_TYPE; i++)
99}
void LWLockInitialize(LWLock *lock, int tranche_id)
Definition lwlock.c:699

References fb(), i, LOCKTAG_LAST_TYPE, and LWLockInitialize().

◆ pgstat_lock_reset_all_cb()

void pgstat_lock_reset_all_cb ( TimestampTz  ts)

Definition at line 102 of file pgstat_lock.c.

103{
104 for (int i = 0; i <= LOCKTAG_LAST_TYPE; i++)
105 {
108
110
111 /*
112 * Use the lock in the first lock type PgStat_LockEntry to protect the
113 * reset timestamp as well.
114 */
115 if (i == 0)
117
118 memset(lck_shstats, 0, sizeof(*lck_shstats));
120 }
121}
TimestampTz stat_reset_timestamp
Definition pgstat.h:363

References fb(), i, PgStat_ShmemControl::lock, PgStatShared_Lock::locks, LOCKTAG_LAST_TYPE, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), pgStatLocal, PgStat_LocalState::shmem, PgStat_Lock::stat_reset_timestamp, PgStat_Lock::stats, and PgStatShared_Lock::stats.

◆ pgstat_lock_snapshot_cb()

void pgstat_lock_snapshot_cb ( void  )

Definition at line 124 of file pgstat_lock.c.

125{
126 for (int i = 0; i <= LOCKTAG_LAST_TYPE; i++)
127 {
131
133
134 /*
135 * Use the lock in the first lock type PgStat_LockEntry to protect the
136 * reset timestamp as well.
137 */
138 if (i == 0)
141
142 /* using struct assignment due to better type safety */
145 }
146}
@ LW_SHARED
Definition lwlock.h:113

References fb(), i, PgStat_ShmemControl::lock, PgStat_Snapshot::lock, PgStatShared_Lock::locks, LOCKTAG_LAST_TYPE, LW_SHARED, LWLockAcquire(), LWLockRelease(), pgStatLocal, PgStat_LocalState::shmem, PgStat_LocalState::snapshot, PgStat_Lock::stat_reset_timestamp, PgStat_Lock::stats, and PgStatShared_Lock::stats.

Variable Documentation

◆ have_lockstats

bool have_lockstats = false
static

◆ PendingLockStats

PgStat_PendingLock PendingLockStats
static