Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes16kdownloads
wait_event.h296 linesDownload Raw Back to utils
1/*-------------------------------------------------------------------------2 * wait_event.h3 *	  Definitions related to wait event reporting4 *5 * Copyright (c) 2001-2023, PostgreSQL Global Development Group6 *7 * src/include/utils/wait_event.h8 * ----------9 */10#ifndef WAIT_EVENT_H11#define WAIT_EVENT_H12 13 14/* ----------15 * Wait Classes16 * ----------17 */18#define PG_WAIT_LWLOCK				0x01000000U19#define PG_WAIT_LOCK				0x03000000U20#define PG_WAIT_BUFFER_PIN			0x04000000U21#define PG_WAIT_ACTIVITY			0x05000000U22#define PG_WAIT_CLIENT				0x06000000U23#define PG_WAIT_EXTENSION			0x07000000U24#define PG_WAIT_IPC					0x08000000U25#define PG_WAIT_TIMEOUT				0x09000000U26#define PG_WAIT_IO					0x0A000000U27 28/* ----------29 * Wait Events - Activity30 *31 * Use this category when a process is waiting because it has no work to do,32 * unless the "Client" or "Timeout" category describes the situation better.33 * Typically, this should only be used for background processes.34 * ----------35 */36typedef enum37{38	WAIT_EVENT_ARCHIVER_MAIN = PG_WAIT_ACTIVITY,39	WAIT_EVENT_AUTOVACUUM_MAIN,40	WAIT_EVENT_BGWRITER_HIBERNATE,41	WAIT_EVENT_BGWRITER_MAIN,42	WAIT_EVENT_CHECKPOINTER_MAIN,43	WAIT_EVENT_LOGICAL_APPLY_MAIN,44	WAIT_EVENT_LOGICAL_LAUNCHER_MAIN,45	WAIT_EVENT_LOGICAL_PARALLEL_APPLY_MAIN,46	WAIT_EVENT_RECOVERY_WAL_STREAM,47	WAIT_EVENT_SYSLOGGER_MAIN,48	WAIT_EVENT_WAL_RECEIVER_MAIN,49	WAIT_EVENT_WAL_SENDER_MAIN,50	WAIT_EVENT_WAL_WRITER_MAIN51} WaitEventActivity;52 53/* ----------54 * Wait Events - Client55 *56 * Use this category when a process is waiting to send data to or receive data57 * from the frontend process to which it is connected.  This is never used for58 * a background process, which has no client connection.59 * ----------60 */61typedef enum62{63	WAIT_EVENT_CLIENT_READ = PG_WAIT_CLIENT,64	WAIT_EVENT_CLIENT_WRITE,65	WAIT_EVENT_GSS_OPEN_SERVER,66	WAIT_EVENT_LIBPQWALRECEIVER_CONNECT,67	WAIT_EVENT_LIBPQWALRECEIVER_RECEIVE,68	WAIT_EVENT_SSL_OPEN_SERVER,69	WAIT_EVENT_WAL_SENDER_WAIT_WAL,70	WAIT_EVENT_WAL_SENDER_WRITE_DATA,71} WaitEventClient;72 73/* ----------74 * Wait Events - IPC75 *76 * Use this category when a process cannot complete the work it is doing because77 * it is waiting for a notification from another process.78 * ----------79 */80typedef enum81{82	WAIT_EVENT_APPEND_READY = PG_WAIT_IPC,83	WAIT_EVENT_ARCHIVE_CLEANUP_COMMAND,84	WAIT_EVENT_ARCHIVE_COMMAND,85	WAIT_EVENT_BACKEND_TERMINATION,86	WAIT_EVENT_BACKUP_WAIT_WAL_ARCHIVE,87	WAIT_EVENT_BGWORKER_SHUTDOWN,88	WAIT_EVENT_BGWORKER_STARTUP,89	WAIT_EVENT_BTREE_PAGE,90	WAIT_EVENT_BUFFER_IO,91	WAIT_EVENT_CHECKPOINT_DONE,92	WAIT_EVENT_CHECKPOINT_START,93	WAIT_EVENT_EXECUTE_GATHER,94	WAIT_EVENT_HASH_BATCH_ALLOCATE,95	WAIT_EVENT_HASH_BATCH_ELECT,96	WAIT_EVENT_HASH_BATCH_LOAD,97	WAIT_EVENT_HASH_BUILD_ALLOCATE,98	WAIT_EVENT_HASH_BUILD_ELECT,99	WAIT_EVENT_HASH_BUILD_HASH_INNER,100	WAIT_EVENT_HASH_BUILD_HASH_OUTER,101	WAIT_EVENT_HASH_GROW_BATCHES_DECIDE,102	WAIT_EVENT_HASH_GROW_BATCHES_ELECT,103	WAIT_EVENT_HASH_GROW_BATCHES_FINISH,104	WAIT_EVENT_HASH_GROW_BATCHES_REALLOCATE,105	WAIT_EVENT_HASH_GROW_BATCHES_REPARTITION,106	WAIT_EVENT_HASH_GROW_BUCKETS_ELECT,107	WAIT_EVENT_HASH_GROW_BUCKETS_REALLOCATE,108	WAIT_EVENT_HASH_GROW_BUCKETS_REINSERT,109	WAIT_EVENT_LOGICAL_APPLY_SEND_DATA,110	WAIT_EVENT_LOGICAL_PARALLEL_APPLY_STATE_CHANGE,111	WAIT_EVENT_LOGICAL_SYNC_DATA,112	WAIT_EVENT_LOGICAL_SYNC_STATE_CHANGE,113	WAIT_EVENT_MQ_INTERNAL,114	WAIT_EVENT_MQ_PUT_MESSAGE,115	WAIT_EVENT_MQ_RECEIVE,116	WAIT_EVENT_MQ_SEND,117	WAIT_EVENT_PARALLEL_BITMAP_SCAN,118	WAIT_EVENT_PARALLEL_CREATE_INDEX_SCAN,119	WAIT_EVENT_PARALLEL_FINISH,120	WAIT_EVENT_PROCARRAY_GROUP_UPDATE,121	WAIT_EVENT_PROC_SIGNAL_BARRIER,122	WAIT_EVENT_PROMOTE,123	WAIT_EVENT_RECOVERY_CONFLICT_SNAPSHOT,124	WAIT_EVENT_RECOVERY_CONFLICT_TABLESPACE,125	WAIT_EVENT_RECOVERY_END_COMMAND,126	WAIT_EVENT_RECOVERY_PAUSE,127	WAIT_EVENT_REPLICATION_ORIGIN_DROP,128	WAIT_EVENT_REPLICATION_SLOT_DROP,129	WAIT_EVENT_RESTORE_COMMAND,130	WAIT_EVENT_SAFE_SNAPSHOT,131	WAIT_EVENT_SYNC_REP,132	WAIT_EVENT_WAL_RECEIVER_EXIT,133	WAIT_EVENT_WAL_RECEIVER_WAIT_START,134	WAIT_EVENT_XACT_GROUP_UPDATE135} WaitEventIPC;136 137/* ----------138 * Wait Events - Timeout139 *140 * Use this category when a process is waiting for a timeout to expire.141 * ----------142 */143typedef enum144{145	WAIT_EVENT_BASE_BACKUP_THROTTLE = PG_WAIT_TIMEOUT,146	WAIT_EVENT_CHECKPOINT_WRITE_DELAY,147	WAIT_EVENT_PG_SLEEP,148	WAIT_EVENT_RECOVERY_APPLY_DELAY,149	WAIT_EVENT_RECOVERY_RETRIEVE_RETRY_INTERVAL,150	WAIT_EVENT_REGISTER_SYNC_REQUEST,151	WAIT_EVENT_SPIN_DELAY,152	WAIT_EVENT_VACUUM_DELAY,153	WAIT_EVENT_VACUUM_TRUNCATE154} WaitEventTimeout;155 156/* ----------157 * Wait Events - IO158 *159 * Use this category when a process is waiting for a IO.160 * ----------161 */162typedef enum163{164	WAIT_EVENT_BASEBACKUP_READ = PG_WAIT_IO,165	WAIT_EVENT_BASEBACKUP_SYNC,166	WAIT_EVENT_BASEBACKUP_WRITE,167	WAIT_EVENT_BUFFILE_READ,168	WAIT_EVENT_BUFFILE_WRITE,169	WAIT_EVENT_BUFFILE_TRUNCATE,170	WAIT_EVENT_CONTROL_FILE_READ,171	WAIT_EVENT_CONTROL_FILE_SYNC,172	WAIT_EVENT_CONTROL_FILE_SYNC_UPDATE,173	WAIT_EVENT_CONTROL_FILE_WRITE,174	WAIT_EVENT_CONTROL_FILE_WRITE_UPDATE,175	WAIT_EVENT_COPY_FILE_READ,176	WAIT_EVENT_COPY_FILE_WRITE,177	WAIT_EVENT_DATA_FILE_EXTEND,178	WAIT_EVENT_DATA_FILE_FLUSH,179	WAIT_EVENT_DATA_FILE_IMMEDIATE_SYNC,180	WAIT_EVENT_DATA_FILE_PREFETCH,181	WAIT_EVENT_DATA_FILE_READ,182	WAIT_EVENT_DATA_FILE_SYNC,183	WAIT_EVENT_DATA_FILE_TRUNCATE,184	WAIT_EVENT_DATA_FILE_WRITE,185	WAIT_EVENT_DSM_ALLOCATE,186	WAIT_EVENT_DSM_FILL_ZERO_WRITE,187	WAIT_EVENT_LOCK_FILE_ADDTODATADIR_READ,188	WAIT_EVENT_LOCK_FILE_ADDTODATADIR_SYNC,189	WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE,190	WAIT_EVENT_LOCK_FILE_CREATE_READ,191	WAIT_EVENT_LOCK_FILE_CREATE_SYNC,192	WAIT_EVENT_LOCK_FILE_CREATE_WRITE,193	WAIT_EVENT_LOCK_FILE_RECHECKDATADIR_READ,194	WAIT_EVENT_LOGICAL_REWRITE_CHECKPOINT_SYNC,195	WAIT_EVENT_LOGICAL_REWRITE_MAPPING_SYNC,196	WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE,197	WAIT_EVENT_LOGICAL_REWRITE_SYNC,198	WAIT_EVENT_LOGICAL_REWRITE_TRUNCATE,199	WAIT_EVENT_LOGICAL_REWRITE_WRITE,200	WAIT_EVENT_RELATION_MAP_READ,201	WAIT_EVENT_RELATION_MAP_REPLACE,202	WAIT_EVENT_RELATION_MAP_WRITE,203	WAIT_EVENT_REORDER_BUFFER_READ,204	WAIT_EVENT_REORDER_BUFFER_WRITE,205	WAIT_EVENT_REORDER_LOGICAL_MAPPING_READ,206	WAIT_EVENT_REPLICATION_SLOT_READ,207	WAIT_EVENT_REPLICATION_SLOT_RESTORE_SYNC,208	WAIT_EVENT_REPLICATION_SLOT_SYNC,209	WAIT_EVENT_REPLICATION_SLOT_WRITE,210	WAIT_EVENT_SLRU_FLUSH_SYNC,211	WAIT_EVENT_SLRU_READ,212	WAIT_EVENT_SLRU_SYNC,213	WAIT_EVENT_SLRU_WRITE,214	WAIT_EVENT_SNAPBUILD_READ,215	WAIT_EVENT_SNAPBUILD_SYNC,216	WAIT_EVENT_SNAPBUILD_WRITE,217	WAIT_EVENT_TIMELINE_HISTORY_FILE_SYNC,218	WAIT_EVENT_TIMELINE_HISTORY_FILE_WRITE,219	WAIT_EVENT_TIMELINE_HISTORY_READ,220	WAIT_EVENT_TIMELINE_HISTORY_SYNC,221	WAIT_EVENT_TIMELINE_HISTORY_WRITE,222	WAIT_EVENT_TWOPHASE_FILE_READ,223	WAIT_EVENT_TWOPHASE_FILE_SYNC,224	WAIT_EVENT_TWOPHASE_FILE_WRITE,225	WAIT_EVENT_VERSION_FILE_WRITE,226	WAIT_EVENT_WALSENDER_TIMELINE_HISTORY_READ,227	WAIT_EVENT_WAL_BOOTSTRAP_SYNC,228	WAIT_EVENT_WAL_BOOTSTRAP_WRITE,229	WAIT_EVENT_WAL_COPY_READ,230	WAIT_EVENT_WAL_COPY_SYNC,231	WAIT_EVENT_WAL_COPY_WRITE,232	WAIT_EVENT_WAL_INIT_SYNC,233	WAIT_EVENT_WAL_INIT_WRITE,234	WAIT_EVENT_WAL_READ,235	WAIT_EVENT_WAL_SYNC,236	WAIT_EVENT_WAL_SYNC_METHOD_ASSIGN,237	WAIT_EVENT_WAL_WRITE,238	WAIT_EVENT_VERSION_FILE_SYNC239} WaitEventIO;240 241 242extern const char *pgstat_get_wait_event(uint32 wait_event_info);243extern const char *pgstat_get_wait_event_type(uint32 wait_event_info);244static inline void pgstat_report_wait_start(uint32 wait_event_info);245static inline void pgstat_report_wait_end(void);246extern void pgstat_set_wait_event_storage(uint32 *wait_event_info);247extern void pgstat_reset_wait_event_storage(void);248 249extern PGDLLIMPORT uint32 *my_wait_event_info;250 251 252/* ----------253 * pgstat_report_wait_start() -254 *255 *	Called from places where server process needs to wait.  This is called256 *	to report wait event information.  The wait information is stored257 *	as 4-bytes where first byte represents the wait event class (type of258 *	wait, for different types of wait, refer WaitClass) and the next259 *	3-bytes represent the actual wait event.  Currently 2-bytes are used260 *	for wait event which is sufficient for current usage, 1-byte is261 *	reserved for future usage.262 *263 *	Historically we used to make this reporting conditional on264 *	pgstat_track_activities, but the check for that seems to add more cost265 *	than it saves.266 *267 *	my_wait_event_info initially points to local memory, making it safe to268 *	call this before MyProc has been initialized.269 * ----------270 */271static inline void272pgstat_report_wait_start(uint32 wait_event_info)273{274	/*275	 * Since this is a four-byte field which is always read and written as276	 * four-bytes, updates are atomic.277	 */278	*(volatile uint32 *) my_wait_event_info = wait_event_info;279}280 281/* ----------282 * pgstat_report_wait_end() -283 *284 *	Called to report end of a wait.285 * ----------286 */287static inline void288pgstat_report_wait_end(void)289{290	/* see pgstat_report_wait_start() */291	*(volatile uint32 *) my_wait_event_info = 0;292}293 294 295#endif							/* WAIT_EVENT_H */296 
codekingpro/portable-devtools · Team Ai