43 #define WAIT_EVENT_CLASS_MASK 0xFF000000
44 #define WAIT_EVENT_ID_MASK 0x0000FFFF
64 #define WAIT_EVENT_EXTENSION_HASH_INIT_SIZE 16
65 #define WAIT_EVENT_EXTENSION_HASH_MAX_SIZE 128
92 #define NUM_BUILTIN_WAIT_EVENT_EXTENSION \
93 (WAIT_EVENT_EXTENSION_FIRST_USER_DEFINED - WAIT_EVENT_EXTENSION)
96 #define WAIT_EVENT_EXTENSION_INFO(eventId) (PG_WAIT_EXTENSION | eventId)
172 "cannot use custom wait event string longer than %u characters",
210 errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
211 errmsg(
"too many wait events for extensions"));
258 elog(
ERROR,
"could not find custom wait event name for ID %u",
273 char **waiteventnames;
285 waiteventnames =
palloc(els *
sizeof(
char *));
301 *nwaitevents =
index;
302 return waiteventnames;
341 const char *event_type;
344 if (wait_event_info == 0)
352 event_type =
"LWLock";
358 event_type =
"BufferPin";
361 event_type =
"Activity";
364 event_type =
"Client";
367 event_type =
"Extension";
373 event_type =
"Timeout";
397 const char *event_name;
400 if (wait_event_info == 0)
419 WaitEventBufferPin w = (WaitEventBufferPin) wait_event_info;
426 WaitEventActivity w = (WaitEventActivity) wait_event_info;
433 WaitEventClient w = (WaitEventClient) wait_event_info;
440 WaitEventIPC w = (WaitEventIPC) wait_event_info;
447 WaitEventTimeout w = (WaitEventTimeout) wait_event_info;
454 WaitEventIO w = (WaitEventIO) wait_event_info;
460 event_name =
"unknown wait event";
467 #include "pgstat_wait_event.c"
#define Assert(condition)
void * hash_search(HTAB *hashp, const void *keyPtr, HASHACTION action, bool *foundPtr)
long hash_get_num_entries(HTAB *hashp)
Size hash_estimate_size(long num_entries, Size entrysize)
void * hash_seq_search(HASH_SEQ_STATUS *status)
void hash_seq_init(HASH_SEQ_STATUS *status, HTAB *hashp)
int errcode(int sqlerrcode)
int errmsg(const char *fmt,...)
#define ereport(elevel,...)
const char * GetLockNameFromTagType(uint16 locktag_type)
const char * GetLWLockIdentifier(uint32 classId, uint16 eventId)
bool LWLockAcquire(LWLock *lock, LWLockMode mode)
void LWLockRelease(LWLock *lock)
char * pstrdup(const char *in)
size_t strlcpy(char *dst, const char *src, size_t siz)
Size add_size(Size s1, Size s2)
void * ShmemInitStruct(const char *name, Size size, bool *foundPtr)
HTAB * ShmemInitHash(const char *name, long init_size, long max_size, HASHCTL *infoP, int hash_flags)
#define SpinLockInit(lock)
#define SpinLockRelease(lock)
#define SpinLockAcquire(lock)
char wait_event_name[NAMEDATALEN]
char wait_event_name[NAMEDATALEN]
static HTAB * WaitEventExtensionHashByName
#define NUM_BUILTIN_WAIT_EVENT_EXTENSION
static const char * pgstat_get_wait_ipc(WaitEventIPC w)
static const char * pgstat_get_wait_io(WaitEventIO w)
const char * pgstat_get_wait_event(uint32 wait_event_info)
void pgstat_set_wait_event_storage(uint32 *wait_event_info)
static const char * pgstat_get_wait_bufferpin(WaitEventBufferPin w)
struct WaitEventExtensionCounterData WaitEventExtensionCounterData
Size WaitEventExtensionShmemSize(void)
struct WaitEventExtensionEntryByName WaitEventExtensionEntryByName
static WaitEventExtensionCounterData * WaitEventExtensionCounter
#define WAIT_EVENT_EXTENSION_INFO(eventId)
static const char * pgstat_get_wait_timeout(WaitEventTimeout w)
static uint32 local_my_wait_event_info
const char * pgstat_get_wait_event_type(uint32 wait_event_info)
static HTAB * WaitEventExtensionHashById
void pgstat_reset_wait_event_storage(void)
#define WAIT_EVENT_EXTENSION_HASH_MAX_SIZE
static const char * pgstat_get_wait_client(WaitEventClient w)
#define WAIT_EVENT_ID_MASK
char ** GetWaitEventExtensionNames(int *nwaitevents)
#define WAIT_EVENT_CLASS_MASK
uint32 WaitEventExtensionNew(const char *wait_event_name)
void WaitEventExtensionShmemInit(void)
#define WAIT_EVENT_EXTENSION_HASH_INIT_SIZE
struct WaitEventExtensionEntryById WaitEventExtensionEntryById
uint32 * my_wait_event_info
static const char * GetWaitEventExtensionIdentifier(uint16 eventId)
static const char * pgstat_get_wait_activity(WaitEventActivity w)
#define PG_WAIT_BUFFERPIN
#define PG_WAIT_EXTENSION