diff options
Diffstat (limited to 'src/include/pgstat.h')
-rw-r--r-- | src/include/pgstat.h | 684 |
1 files changed, 367 insertions, 317 deletions
diff --git a/src/include/pgstat.h b/src/include/pgstat.h index cfb00ba65a5..534d595ca08 100644 --- a/src/include/pgstat.h +++ b/src/include/pgstat.h @@ -33,6 +33,7 @@ /* Default directory to store temporary statistics data in */ #define PG_STAT_TMP_DIR "pg_stat_tmp" + /* Values for track_functions GUC variable --- order is significant! */ typedef enum TrackFunctionsLevel { @@ -52,48 +53,74 @@ typedef enum SessionEndType } SessionEndType; /* ---------- - * The types of backend -> collector messages + * The data type used for counters. * ---------- */ -typedef enum StatMsgType +typedef int64 PgStat_Counter; + +/* Possible targets for resetting cluster-wide shared values */ +typedef enum PgStat_Shared_Reset_Target { - PGSTAT_MTYPE_DUMMY, - PGSTAT_MTYPE_INQUIRY, - PGSTAT_MTYPE_TABSTAT, - PGSTAT_MTYPE_TABPURGE, - PGSTAT_MTYPE_DROPDB, - PGSTAT_MTYPE_RESETCOUNTER, - PGSTAT_MTYPE_RESETSHAREDCOUNTER, - PGSTAT_MTYPE_RESETSINGLECOUNTER, - PGSTAT_MTYPE_RESETSLRUCOUNTER, - PGSTAT_MTYPE_RESETREPLSLOTCOUNTER, - PGSTAT_MTYPE_RESETSUBCOUNTER, - PGSTAT_MTYPE_AUTOVAC_START, - PGSTAT_MTYPE_VACUUM, - PGSTAT_MTYPE_ANALYZE, - PGSTAT_MTYPE_ARCHIVER, - PGSTAT_MTYPE_BGWRITER, - PGSTAT_MTYPE_CHECKPOINTER, - PGSTAT_MTYPE_WAL, - PGSTAT_MTYPE_SLRU, - PGSTAT_MTYPE_FUNCSTAT, - PGSTAT_MTYPE_FUNCPURGE, - PGSTAT_MTYPE_RECOVERYCONFLICT, - PGSTAT_MTYPE_TEMPFILE, - PGSTAT_MTYPE_DEADLOCK, - PGSTAT_MTYPE_CHECKSUMFAILURE, - PGSTAT_MTYPE_REPLSLOT, - PGSTAT_MTYPE_CONNECT, - PGSTAT_MTYPE_DISCONNECT, - PGSTAT_MTYPE_SUBSCRIPTIONDROP, - PGSTAT_MTYPE_SUBSCRIPTIONERROR, -} StatMsgType; + RESET_ARCHIVER, + RESET_BGWRITER, + RESET_WAL +} PgStat_Shared_Reset_Target; + +/* Possible object types for resetting single counters */ +typedef enum PgStat_Single_Reset_Type +{ + RESET_TABLE, + RESET_FUNCTION +} PgStat_Single_Reset_Type; + + +/* ------------------------------------------------------------ + * Structures kept in backend local memory while accumulating counts + * ------------------------------------------------------------ + */ /* ---------- - * The data type used for counters. + * PgStat_FunctionCounts The actual per-function counts kept by a backend + * + * This struct should contain only actual event counters, because we memcmp + * it against zeroes to detect whether there are any counts to transmit. + * + * Note that the time counters are in instr_time format here. We convert to + * microseconds in PgStat_Counter format when transmitting to the collector. * ---------- */ -typedef int64 PgStat_Counter; +typedef struct PgStat_FunctionCounts +{ + PgStat_Counter f_numcalls; + instr_time f_total_time; + instr_time f_self_time; +} PgStat_FunctionCounts; + +/* ---------- + * PgStat_BackendFunctionEntry Entry in backend's per-function hash table + * ---------- + */ +typedef struct PgStat_BackendFunctionEntry +{ + Oid f_id; + PgStat_FunctionCounts f_counts; +} PgStat_BackendFunctionEntry; + +/* + * Working state needed to accumulate per-function-call timing statistics. + */ +typedef struct PgStat_FunctionCallUsage +{ + /* Link to function's hashtable entry (must still be there at exit!) */ + /* NULL means we are not tracking the current function call */ + PgStat_FunctionCounts *fs; + /* Total time previously charged to function, as of function start */ + instr_time save_f_total_time; + /* Backend-wide total time as of function start */ + instr_time save_total; + /* system clock as of function start */ + instr_time f_start; +} PgStat_FunctionCallUsage; /* ---------- * PgStat_TableCounts The actual per-table counts kept by a backend @@ -137,27 +164,6 @@ typedef struct PgStat_TableCounts PgStat_Counter t_blocks_hit; } PgStat_TableCounts; -/* Possible targets for resetting cluster-wide shared values */ -typedef enum PgStat_Shared_Reset_Target -{ - RESET_ARCHIVER, - RESET_BGWRITER, - RESET_WAL -} PgStat_Shared_Reset_Target; - -/* Possible object types for resetting single counters */ -typedef enum PgStat_Single_Reset_Type -{ - RESET_TABLE, - RESET_FUNCTION -} PgStat_Single_Reset_Type; - -/* ------------------------------------------------------------ - * Structures kept in backend local memory while accumulating counts - * ------------------------------------------------------------ - */ - - /* ---------- * PgStat_TableStatus Per-table status within a backend * @@ -210,6 +216,43 @@ typedef struct PgStat_TableXactStatus * ------------------------------------------------------------ */ +/* ---------- + * The types of backend -> collector messages + * ---------- + */ +typedef enum StatMsgType +{ + PGSTAT_MTYPE_DUMMY, + PGSTAT_MTYPE_INQUIRY, + PGSTAT_MTYPE_TABSTAT, + PGSTAT_MTYPE_TABPURGE, + PGSTAT_MTYPE_DROPDB, + PGSTAT_MTYPE_RESETCOUNTER, + PGSTAT_MTYPE_RESETSHAREDCOUNTER, + PGSTAT_MTYPE_RESETSINGLECOUNTER, + PGSTAT_MTYPE_RESETSLRUCOUNTER, + PGSTAT_MTYPE_RESETREPLSLOTCOUNTER, + PGSTAT_MTYPE_RESETSUBCOUNTER, + PGSTAT_MTYPE_AUTOVAC_START, + PGSTAT_MTYPE_VACUUM, + PGSTAT_MTYPE_ANALYZE, + PGSTAT_MTYPE_ARCHIVER, + PGSTAT_MTYPE_BGWRITER, + PGSTAT_MTYPE_CHECKPOINTER, + PGSTAT_MTYPE_WAL, + PGSTAT_MTYPE_SLRU, + PGSTAT_MTYPE_FUNCSTAT, + PGSTAT_MTYPE_FUNCPURGE, + PGSTAT_MTYPE_RECOVERYCONFLICT, + PGSTAT_MTYPE_TEMPFILE, + PGSTAT_MTYPE_DEADLOCK, + PGSTAT_MTYPE_CHECKSUMFAILURE, + PGSTAT_MTYPE_REPLSLOT, + PGSTAT_MTYPE_CONNECT, + PGSTAT_MTYPE_DISCONNECT, + PGSTAT_MTYPE_SUBSCRIPTIONDROP, + PGSTAT_MTYPE_SUBSCRIPTIONERROR, +} StatMsgType; /* ---------- * PgStat_MsgHdr The common message header @@ -241,7 +284,6 @@ typedef struct PgStat_MsgDummy PgStat_MsgHdr m_hdr; } PgStat_MsgDummy; - /* ---------- * PgStat_MsgInquiry Sent by a backend to ask the collector * to write the stats file(s). @@ -260,7 +302,6 @@ typedef struct PgStat_MsgDummy * effect unless that occurs. We assume clock_time >= cutoff_time, though. * ---------- */ - typedef struct PgStat_MsgInquiry { PgStat_MsgHdr m_hdr; @@ -269,7 +310,6 @@ typedef struct PgStat_MsgInquiry Oid databaseid; /* requested DB (InvalidOid => shared only) */ } PgStat_MsgInquiry; - /* ---------- * PgStat_TableEntry Per-table info in a MsgTabstat * ---------- @@ -304,7 +344,6 @@ typedef struct PgStat_MsgTabstat PgStat_TableEntry m_entry[PGSTAT_NUM_TABENTRIES]; } PgStat_MsgTabstat; - /* ---------- * PgStat_MsgTabpurge Sent by the backend to tell the collector * about dead tables. @@ -322,7 +361,6 @@ typedef struct PgStat_MsgTabpurge Oid m_tableid[PGSTAT_NUM_TABPURGE]; } PgStat_MsgTabpurge; - /* ---------- * PgStat_MsgDropdb Sent by the backend to tell the collector * about a dropped database @@ -334,7 +372,6 @@ typedef struct PgStat_MsgDropdb Oid m_databaseid; } PgStat_MsgDropdb; - /* ---------- * PgStat_MsgResetcounter Sent by the backend to tell the collector * to reset counters @@ -405,7 +442,6 @@ typedef struct PgStat_MsgResetsubcounter * stats */ } PgStat_MsgResetsubcounter; - /* ---------- * PgStat_MsgAutovacStart Sent by the autovacuum daemon to signal * that a database is going to be processed @@ -418,7 +454,6 @@ typedef struct PgStat_MsgAutovacStart TimestampTz m_start_time; } PgStat_MsgAutovacStart; - /* ---------- * PgStat_MsgVacuum Sent by the backend or autovacuum daemon * after VACUUM @@ -435,7 +470,6 @@ typedef struct PgStat_MsgVacuum PgStat_Counter m_dead_tuples; } PgStat_MsgVacuum; - /* ---------- * PgStat_MsgAnalyze Sent by the backend or autovacuum daemon * after ANALYZE @@ -453,7 +487,6 @@ typedef struct PgStat_MsgAnalyze PgStat_Counter m_dead_tuples; } PgStat_MsgAnalyze; - /* ---------- * PgStat_MsgArchiver Sent by the archiver to update statistics. * ---------- @@ -602,33 +635,6 @@ typedef struct PgStat_MsgTempFile } PgStat_MsgTempFile; /* ---------- - * PgStat_FunctionCounts The actual per-function counts kept by a backend - * - * This struct should contain only actual event counters, because we memcmp - * it against zeroes to detect whether there are any counts to transmit. - * - * Note that the time counters are in instr_time format here. We convert to - * microseconds in PgStat_Counter format when transmitting to the collector. - * ---------- - */ -typedef struct PgStat_FunctionCounts -{ - PgStat_Counter f_numcalls; - instr_time f_total_time; - instr_time f_self_time; -} PgStat_FunctionCounts; - -/* ---------- - * PgStat_BackendFunctionEntry Entry in backend's per-function hash table - * ---------- - */ -typedef struct PgStat_BackendFunctionEntry -{ - Oid f_id; - PgStat_FunctionCounts f_counts; -} PgStat_BackendFunctionEntry; - -/* ---------- * PgStat_FunctionEntry Per-function info in a MsgFuncstat * ---------- */ @@ -770,6 +776,48 @@ typedef union PgStat_Msg #define PGSTAT_FILE_FORMAT_ID 0x01A5BCA6 +/* + * Archiver statistics kept in the stats collector + */ +typedef struct PgStat_ArchiverStats +{ + PgStat_Counter archived_count; /* archival successes */ + char last_archived_wal[MAX_XFN_CHARS + 1]; /* last WAL file + * archived */ + TimestampTz last_archived_timestamp; /* last archival success time */ + PgStat_Counter failed_count; /* failed archival attempts */ + char last_failed_wal[MAX_XFN_CHARS + 1]; /* WAL file involved in + * last failure */ + TimestampTz last_failed_timestamp; /* last archival failure time */ + TimestampTz stat_reset_timestamp; +} PgStat_ArchiverStats; + +/* + * Background writer statistics kept in the stats collector + */ +typedef struct PgStat_BgWriterStats +{ + PgStat_Counter buf_written_clean; + PgStat_Counter maxwritten_clean; + PgStat_Counter buf_alloc; + TimestampTz stat_reset_timestamp; +} PgStat_BgWriterStats; + +/* + * Checkpointer statistics kept in the stats collector + */ +typedef struct PgStat_CheckpointerStats +{ + TimestampTz stats_timestamp; /* time of stats file update */ + PgStat_Counter timed_checkpoints; + PgStat_Counter requested_checkpoints; + PgStat_Counter checkpoint_write_time; /* times in milliseconds */ + PgStat_Counter checkpoint_sync_time; + PgStat_Counter buf_written_checkpoints; + PgStat_Counter buf_written_backend; + PgStat_Counter buf_fsync_backend; +} PgStat_CheckpointerStats; + /* ---------- * PgStat_StatDBEntry The collector's data per database * ---------- @@ -818,44 +866,6 @@ typedef struct PgStat_StatDBEntry HTAB *functions; } PgStat_StatDBEntry; - -/* ---------- - * PgStat_StatTabEntry The collector's data per table (or index) - * ---------- - */ -typedef struct PgStat_StatTabEntry -{ - Oid tableid; - - PgStat_Counter numscans; - - PgStat_Counter tuples_returned; - PgStat_Counter tuples_fetched; - - PgStat_Counter tuples_inserted; - PgStat_Counter tuples_updated; - PgStat_Counter tuples_deleted; - PgStat_Counter tuples_hot_updated; - - PgStat_Counter n_live_tuples; - PgStat_Counter n_dead_tuples; - PgStat_Counter changes_since_analyze; - PgStat_Counter inserts_since_vacuum; - - PgStat_Counter blocks_fetched; - PgStat_Counter blocks_hit; - - TimestampTz vacuum_timestamp; /* user initiated vacuum */ - PgStat_Counter vacuum_count; - TimestampTz autovac_vacuum_timestamp; /* autovacuum initiated */ - PgStat_Counter autovac_vacuum_count; - TimestampTz analyze_timestamp; /* user initiated */ - PgStat_Counter analyze_count; - TimestampTz autovac_analyze_timestamp; /* autovacuum initiated */ - PgStat_Counter autovac_analyze_count; -} PgStat_StatTabEntry; - - /* ---------- * PgStat_StatFuncEntry The collector's data per function * ---------- @@ -870,49 +880,6 @@ typedef struct PgStat_StatFuncEntry PgStat_Counter f_self_time; } PgStat_StatFuncEntry; - -/* - * Archiver statistics kept in the stats collector - */ -typedef struct PgStat_ArchiverStats -{ - PgStat_Counter archived_count; /* archival successes */ - char last_archived_wal[MAX_XFN_CHARS + 1]; /* last WAL file - * archived */ - TimestampTz last_archived_timestamp; /* last archival success time */ - PgStat_Counter failed_count; /* failed archival attempts */ - char last_failed_wal[MAX_XFN_CHARS + 1]; /* WAL file involved in - * last failure */ - TimestampTz last_failed_timestamp; /* last archival failure time */ - TimestampTz stat_reset_timestamp; -} PgStat_ArchiverStats; - -/* - * Background writer statistics kept in the stats collector - */ -typedef struct PgStat_BgWriterStats -{ - PgStat_Counter buf_written_clean; - PgStat_Counter maxwritten_clean; - PgStat_Counter buf_alloc; - TimestampTz stat_reset_timestamp; -} PgStat_BgWriterStats; - -/* - * Checkpointer statistics kept in the stats collector - */ -typedef struct PgStat_CheckpointerStats -{ - TimestampTz stats_timestamp; /* time of stats file update */ - PgStat_Counter timed_checkpoints; - PgStat_Counter requested_checkpoints; - PgStat_Counter checkpoint_write_time; /* times in milliseconds */ - PgStat_Counter checkpoint_sync_time; - PgStat_Counter buf_written_checkpoints; - PgStat_Counter buf_written_backend; - PgStat_Counter buf_fsync_backend; -} PgStat_CheckpointerStats; - /* * Global statistics kept in the stats collector */ @@ -925,20 +892,21 @@ typedef struct PgStat_GlobalStats } PgStat_GlobalStats; /* - * WAL statistics kept in the stats collector + * Replication slot statistics kept in the stats collector */ -typedef struct PgStat_WalStats +typedef struct PgStat_StatReplSlotEntry { - PgStat_Counter wal_records; - PgStat_Counter wal_fpi; - uint64 wal_bytes; - PgStat_Counter wal_buffers_full; - PgStat_Counter wal_write; - PgStat_Counter wal_sync; - PgStat_Counter wal_write_time; - PgStat_Counter wal_sync_time; + NameData slotname; + PgStat_Counter spill_txns; + PgStat_Counter spill_count; + PgStat_Counter spill_bytes; + PgStat_Counter stream_txns; + PgStat_Counter stream_count; + PgStat_Counter stream_bytes; + PgStat_Counter total_txns; + PgStat_Counter total_bytes; TimestampTz stat_reset_timestamp; -} PgStat_WalStats; +} PgStat_StatReplSlotEntry; /* * SLRU statistics kept in the stats collector @@ -956,23 +924,6 @@ typedef struct PgStat_SLRUStats } PgStat_SLRUStats; /* - * Replication slot statistics kept in the stats collector - */ -typedef struct PgStat_StatReplSlotEntry -{ - NameData slotname; - PgStat_Counter spill_txns; - PgStat_Counter spill_count; - PgStat_Counter spill_bytes; - PgStat_Counter stream_txns; - PgStat_Counter stream_count; - PgStat_Counter stream_bytes; - PgStat_Counter total_txns; - PgStat_Counter total_bytes; - TimestampTz stat_reset_timestamp; -} PgStat_StatReplSlotEntry; - -/* * Subscription statistics kept in the stats collector. */ typedef struct PgStat_StatSubEntry @@ -984,126 +935,174 @@ typedef struct PgStat_StatSubEntry TimestampTz stat_reset_timestamp; } PgStat_StatSubEntry; -/* - * Working state needed to accumulate per-function-call timing statistics. +/* ---------- + * PgStat_StatTabEntry The collector's data per table (or index) + * ---------- */ -typedef struct PgStat_FunctionCallUsage +typedef struct PgStat_StatTabEntry { - /* Link to function's hashtable entry (must still be there at exit!) */ - /* NULL means we are not tracking the current function call */ - PgStat_FunctionCounts *fs; - /* Total time previously charged to function, as of function start */ - instr_time save_f_total_time; - /* Backend-wide total time as of function start */ - instr_time save_total; - /* system clock as of function start */ - instr_time f_start; -} PgStat_FunctionCallUsage; + Oid tableid; + PgStat_Counter numscans; -/* ---------- - * GUC parameters - * ---------- - */ -extern PGDLLIMPORT bool pgstat_track_counts; -extern PGDLLIMPORT int pgstat_track_functions; -extern char *pgstat_stat_directory; -extern char *pgstat_stat_tmpname; -extern char *pgstat_stat_filename; + PgStat_Counter tuples_returned; + PgStat_Counter tuples_fetched; -/* - * BgWriter statistics counters are updated directly by bgwriter and bufmgr - */ -extern PgStat_MsgBgWriter PendingBgWriterStats; + PgStat_Counter tuples_inserted; + PgStat_Counter tuples_updated; + PgStat_Counter tuples_deleted; + PgStat_Counter tuples_hot_updated; -/* - * Checkpointer statistics counters are updated directly by checkpointer and - * bufmgr. - */ -extern PgStat_MsgCheckpointer PendingCheckpointerStats; + PgStat_Counter n_live_tuples; + PgStat_Counter n_dead_tuples; + PgStat_Counter changes_since_analyze; + PgStat_Counter inserts_since_vacuum; -/* - * WAL statistics counter is updated by backends and background processes - */ -extern PgStat_MsgWal WalStats; + PgStat_Counter blocks_fetched; + PgStat_Counter blocks_hit; -/* - * Updated by pgstat_count_buffer_*_time macros - */ -extern PgStat_Counter pgStatBlockReadTime; -extern PgStat_Counter pgStatBlockWriteTime; + TimestampTz vacuum_timestamp; /* user initiated vacuum */ + PgStat_Counter vacuum_count; + TimestampTz autovac_vacuum_timestamp; /* autovacuum initiated */ + PgStat_Counter autovac_vacuum_count; + TimestampTz analyze_timestamp; /* user initiated */ + PgStat_Counter analyze_count; + TimestampTz autovac_analyze_timestamp; /* autovacuum initiated */ + PgStat_Counter autovac_analyze_count; +} PgStat_StatTabEntry; /* - * Updated by pgstat_count_conn_*_time macros, called by - * pgstat_report_activity(). + * WAL statistics kept in the stats collector */ -extern PgStat_Counter pgStatActiveTime; -extern PgStat_Counter pgStatTransactionIdleTime; +typedef struct PgStat_WalStats +{ + PgStat_Counter wal_records; + PgStat_Counter wal_fpi; + uint64 wal_bytes; + PgStat_Counter wal_buffers_full; + PgStat_Counter wal_write; + PgStat_Counter wal_sync; + PgStat_Counter wal_write_time; + PgStat_Counter wal_sync_time; + TimestampTz stat_reset_timestamp; +} PgStat_WalStats; /* - * Updated by the traffic cop and in errfinish() + * Functions in pgstat.c */ -extern SessionEndType pgStatSessionEndCause; -/* ---------- - * Functions called from postmaster - * ---------- - */ +/* functions called from postmaster */ extern void pgstat_init(void); -extern int pgstat_start(void); extern void pgstat_reset_all(void); +extern int pgstat_start(void); extern void allow_immediate_pgstat_restart(void); #ifdef EXEC_BACKEND extern void PgstatCollectorMain(int argc, char *argv[]) pg_attribute_noreturn(); #endif +/* Functions for backend initialization */ +extern void pgstat_initialize(void); -/* ---------- - * Functions called from backends - * ---------- - */ -extern void pgstat_ping(void); +/* transactional integration */ +extern void AtEOXact_PgStat(bool isCommit, bool parallel); +extern void AtEOSubXact_PgStat(bool isCommit, int nestDepth); +extern void AtPrepare_PgStat(void); +extern void PostPrepare_PgStat(void); +extern void pgstat_clear_snapshot(void); +/* Functions called from backends */ extern void pgstat_report_stat(bool force); extern void pgstat_vacuum_stat(void); -extern void pgstat_drop_database(Oid databaseid); +extern void pgstat_ping(void); -extern void pgstat_clear_snapshot(void); extern void pgstat_reset_counters(void); -extern void pgstat_reset_shared_counters(const char *); extern void pgstat_reset_single_counter(Oid objectid, PgStat_Single_Reset_Type type); -extern void pgstat_reset_slru_counter(const char *); -extern void pgstat_reset_replslot_counter(const char *name); -extern void pgstat_reset_subscription_counter(Oid subid); +extern void pgstat_reset_shared_counters(const char *); -extern void pgstat_report_connect(Oid dboid); -extern void pgstat_report_autovac(Oid dboid); -extern void pgstat_report_vacuum(Oid tableoid, bool shared, - PgStat_Counter livetuples, PgStat_Counter deadtuples); -extern void pgstat_report_analyze(Relation rel, - PgStat_Counter livetuples, PgStat_Counter deadtuples, - bool resetcounter); +/* stats accessors */ +extern PgStat_ArchiverStats *pgstat_fetch_stat_archiver(void); +extern PgStat_BgWriterStats *pgstat_fetch_stat_bgwriter(void); +extern PgStat_CheckpointerStats *pgstat_fetch_stat_checkpointer(void); +extern PgStat_StatDBEntry *pgstat_fetch_stat_dbentry(Oid dbid); +extern PgStat_StatFuncEntry *pgstat_fetch_stat_funcentry(Oid funcid); +extern PgStat_GlobalStats *pgstat_fetch_global(void); +extern PgStat_StatReplSlotEntry *pgstat_fetch_replslot(NameData slotname); +extern PgStat_StatSubEntry *pgstat_fetch_stat_subscription(Oid subid); +extern PgStat_SLRUStats *pgstat_fetch_slru(void); +extern PgStat_StatTabEntry *pgstat_fetch_stat_tabentry(Oid relid); +extern PgStat_WalStats *pgstat_fetch_stat_wal(void); + + +/* + * Functions in pgstat_archiver.c + */ + +extern void pgstat_send_archiver(const char *xlog, bool failed); + + +/* + * Functions in pgstat_bgwriter.c + */ +extern void pgstat_send_bgwriter(void); + + +/* + * Functions in pgstat_checkpointer.c + */ + +extern void pgstat_send_checkpointer(void); + + +/* + * Functions in pgstat_database.c + */ + +extern void pgstat_drop_database(Oid databaseid); extern void pgstat_report_recovery_conflict(int reason); extern void pgstat_report_deadlock(void); extern void pgstat_report_checksum_failures_in_db(Oid dboid, int failurecount); extern void pgstat_report_checksum_failure(void); -extern void pgstat_report_replslot(const PgStat_StatReplSlotEntry *repSlotStat); -extern void pgstat_report_replslot_create(const char *slotname); -extern void pgstat_report_replslot_drop(const char *slotname); -extern void pgstat_report_subscription_error(Oid subid, bool is_apply_error); -extern void pgstat_report_subscription_drop(Oid subid); +extern void pgstat_report_connect(Oid dboid); -extern void pgstat_initialize(void); +#define pgstat_count_buffer_read_time(n) \ + (pgStatBlockReadTime += (n)) +#define pgstat_count_buffer_write_time(n) \ + (pgStatBlockWriteTime += (n)) +#define pgstat_count_conn_active_time(n) \ + (pgStatActiveTime += (n)) +#define pgstat_count_conn_txn_idle_time(n) \ + (pgStatTransactionIdleTime += (n)) -extern PgStat_TableStatus *find_tabstat_entry(Oid rel_id); +/* + * Functions in pgstat_function.c + */ + +struct FunctionCallInfoBaseData; +extern void pgstat_init_function_usage(struct FunctionCallInfoBaseData *fcinfo, + PgStat_FunctionCallUsage *fcu); +extern void pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, + bool finalize); + extern PgStat_BackendFunctionEntry *find_funcstat_entry(Oid func_id); + +/* + * Functions in pgstat_relation.c + */ + extern void pgstat_relation_init(Relation rel); +extern void pgstat_report_autovac(Oid dboid); +extern void pgstat_report_vacuum(Oid tableoid, bool shared, + PgStat_Counter livetuples, PgStat_Counter deadtuples); +extern void pgstat_report_analyze(Relation rel, + PgStat_Counter livetuples, PgStat_Counter deadtuples, + bool resetcounter); + #define pgstat_relation_should_count(rel) \ (likely((rel)->pgstat_info != NULL)) @@ -1144,14 +1143,6 @@ extern void pgstat_relation_init(Relation rel); if (pgstat_relation_should_count(rel)) \ (rel)->pgstat_info->t_counts.t_blocks_hit++; \ } while (0) -#define pgstat_count_buffer_read_time(n) \ - (pgStatBlockReadTime += (n)) -#define pgstat_count_buffer_write_time(n) \ - (pgStatBlockWriteTime += (n)) -#define pgstat_count_conn_active_time(n) \ - (pgStatActiveTime += (n)) -#define pgstat_count_conn_txn_idle_time(n) \ - (pgStatTransactionIdleTime += (n)) extern void pgstat_count_heap_insert(Relation rel, PgStat_Counter n); extern void pgstat_count_heap_update(Relation rel, bool hot); @@ -1159,45 +1150,29 @@ extern void pgstat_count_heap_delete(Relation rel); extern void pgstat_count_truncate(Relation rel); extern void pgstat_update_heap_dead_tuples(Relation rel, int delta); -struct FunctionCallInfoBaseData; -extern void pgstat_init_function_usage(struct FunctionCallInfoBaseData *fcinfo, - PgStat_FunctionCallUsage *fcu); -extern void pgstat_end_function_usage(PgStat_FunctionCallUsage *fcu, - bool finalize); - -extern void AtEOXact_PgStat(bool isCommit, bool parallel); -extern void AtEOSubXact_PgStat(bool isCommit, int nestDepth); - -extern void AtPrepare_PgStat(void); -extern void PostPrepare_PgStat(void); - extern void pgstat_twophase_postcommit(TransactionId xid, uint16 info, void *recdata, uint32 len); extern void pgstat_twophase_postabort(TransactionId xid, uint16 info, void *recdata, uint32 len); -extern void pgstat_send_archiver(const char *xlog, bool failed); -extern void pgstat_send_bgwriter(void); -extern void pgstat_send_checkpointer(void); -extern void pgstat_send_wal(bool force); +extern PgStat_TableStatus *find_tabstat_entry(Oid rel_id); -/* ---------- - * Support functions for the SQL-callable functions to - * generate the pgstat* views. - * ---------- + +/* + * Functions in pgstat_replslot.c */ -extern PgStat_StatDBEntry *pgstat_fetch_stat_dbentry(Oid dbid); -extern PgStat_StatTabEntry *pgstat_fetch_stat_tabentry(Oid relid); -extern PgStat_StatFuncEntry *pgstat_fetch_stat_funcentry(Oid funcid); -extern PgStat_StatSubEntry *pgstat_fetch_stat_subscription(Oid subid); -extern PgStat_ArchiverStats *pgstat_fetch_stat_archiver(void); -extern PgStat_BgWriterStats *pgstat_fetch_stat_bgwriter(void); -extern PgStat_CheckpointerStats *pgstat_fetch_stat_checkpointer(void); -extern PgStat_GlobalStats *pgstat_fetch_global(void); -extern PgStat_WalStats *pgstat_fetch_stat_wal(void); -extern PgStat_SLRUStats *pgstat_fetch_slru(void); -extern PgStat_StatReplSlotEntry *pgstat_fetch_replslot(NameData slotname); +extern void pgstat_reset_replslot_counter(const char *name); +extern void pgstat_report_replslot(const PgStat_StatReplSlotEntry *repSlotStat); +extern void pgstat_report_replslot_create(const char *slotname); +extern void pgstat_report_replslot_drop(const char *slotname); + + +/* + * Functions in pgstat_slru.c + */ + +extern void pgstat_reset_slru_counter(const char *); extern void pgstat_count_slru_page_zeroed(int slru_idx); extern void pgstat_count_slru_page_hit(int slru_idx); extern void pgstat_count_slru_page_read(int slru_idx); @@ -1208,4 +1183,79 @@ extern void pgstat_count_slru_truncate(int slru_idx); extern const char *pgstat_slru_name(int slru_idx); extern int pgstat_slru_index(const char *name); + +/* + * Functions in pgstat_subscription.c + */ + +extern void pgstat_reset_subscription_counter(Oid subid); +extern void pgstat_report_subscription_error(Oid subid, bool is_apply_error); +extern void pgstat_report_subscription_drop(Oid subid); + + +/* + * Functions in pgstat_wal.c + */ + +extern void pgstat_send_wal(bool force); + + +/* + * Variables in pgstat.c + */ + +/* GUC parameters */ +extern PGDLLIMPORT bool pgstat_track_counts; +extern PGDLLIMPORT int pgstat_track_functions; +extern char *pgstat_stat_directory; +extern char *pgstat_stat_tmpname; +extern char *pgstat_stat_filename; + + +/* + * Variables in pgstat_bgwriter.c + */ + +/* updated directly by bgwriter and bufmgr */ +extern PgStat_MsgBgWriter PendingBgWriterStats; + + +/* + * Variables in pgstat_checkpointer.c + */ + +/* + * Checkpointer statistics counters are updated directly by checkpointer and + * bufmgr. + */ +extern PgStat_MsgCheckpointer PendingCheckpointerStats; + + +/* + * Variables in pgstat_database.c + */ + +/* Updated by pgstat_count_buffer_*_time macros */ +extern PgStat_Counter pgStatBlockReadTime; +extern PgStat_Counter pgStatBlockWriteTime; + +/* + * Updated by pgstat_count_conn_*_time macros, called by + * pgstat_report_activity(). + */ +extern PgStat_Counter pgStatActiveTime; +extern PgStat_Counter pgStatTransactionIdleTime; + +/* updated by the traffic cop and in errfinish() */ +extern SessionEndType pgStatSessionEndCause; + + +/* + * Variables in pgstat_wal.c + */ + +/* updated directly by backends and background processes */ +extern PgStat_MsgWal WalStats; + + #endif /* PGSTAT_H */ |