summaryrefslogtreecommitdiff
path: root/src/backend/postmaster/pgstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/postmaster/pgstat.c')
-rw-r--r--src/backend/postmaster/pgstat.c142
1 files changed, 72 insertions, 70 deletions
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 8623dbd005..22ba2ee344 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -13,7 +13,7 @@
*
* Copyright (c) 2001-2007, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.166 2007/09/25 20:03:37 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.167 2007/11/15 21:14:37 momjian Exp $
* ----------
*/
#include "postgres.h"
@@ -127,14 +127,14 @@ static bool pgStatRunningInCollector = false;
* avoiding repeated searches in pgstat_initstats() when a relation is
* repeatedly opened during a transaction.
*/
-#define TABSTAT_QUANTUM 100 /* we alloc this many at a time */
+#define TABSTAT_QUANTUM 100 /* we alloc this many at a time */
typedef struct TabStatusArray
{
struct TabStatusArray *tsa_next; /* link to next array, if any */
- int tsa_used; /* # entries currently used */
+ int tsa_used; /* # entries currently used */
PgStat_TableStatus tsa_entries[TABSTAT_QUANTUM]; /* per-table data */
-} TabStatusArray;
+} TabStatusArray;
static TabStatusArray *pgStatTabList = NULL;
@@ -147,10 +147,10 @@ static TabStatusArray *pgStatTabList = NULL;
*/
typedef struct PgStat_SubXactStatus
{
- int nest_level; /* subtransaction nest level */
+ int nest_level; /* subtransaction nest level */
struct PgStat_SubXactStatus *prev; /* higher-level subxact if any */
PgStat_TableXactStatus *first; /* head of list for this subxact */
-} PgStat_SubXactStatus;
+} PgStat_SubXactStatus;
static PgStat_SubXactStatus *pgStatXactStack = NULL;
@@ -160,11 +160,11 @@ static int pgStatXactRollback = 0;
/* Record that's written to 2PC state file when pgstat state is persisted */
typedef struct TwoPhasePgStatRecord
{
- PgStat_Counter tuples_inserted; /* tuples inserted in xact */
- PgStat_Counter tuples_deleted; /* tuples deleted in xact */
- Oid t_id; /* table's OID */
- bool t_shared; /* is it a shared catalog? */
-} TwoPhasePgStatRecord;
+ PgStat_Counter tuples_inserted; /* tuples inserted in xact */
+ PgStat_Counter tuples_deleted; /* tuples deleted in xact */
+ Oid t_id; /* table's OID */
+ bool t_shared; /* is it a shared catalog? */
+} TwoPhasePgStatRecord;
/*
* Info about current "snapshot" of stats file
@@ -221,7 +221,7 @@ static void pgstat_recv_resetcounter(PgStat_MsgResetcounter *msg, int len);
static void pgstat_recv_autovac(PgStat_MsgAutovacStart *msg, int len);
static void pgstat_recv_vacuum(PgStat_MsgVacuum *msg, int len);
static void pgstat_recv_analyze(PgStat_MsgAnalyze *msg, int len);
-static void pgstat_recv_bgwriter(PgStat_MsgBgWriter *msg, int len);
+static void pgstat_recv_bgwriter(PgStat_MsgBgWriter * msg, int len);
/* ------------------------------------------------------------
@@ -470,9 +470,9 @@ startup_failed:
/*
* Adjust GUC variables to suppress useless activity, and for debugging
- * purposes (seeing track_counts off is a clue that we failed here).
- * We use PGC_S_OVERRIDE because there is no point in trying to turn it
- * back on from postgresql.conf without a restart.
+ * purposes (seeing track_counts off is a clue that we failed here). We
+ * use PGC_S_OVERRIDE because there is no point in trying to turn it back
+ * on from postgresql.conf without a restart.
*/
SetConfigOption("track_counts", "off", PGC_INTERNAL, PGC_S_OVERRIDE);
}
@@ -531,8 +531,8 @@ pgstat_start(void)
pid_t pgStatPid;
/*
- * Check that the socket is there, else pgstat_init failed and we can
- * do nothing useful.
+ * Check that the socket is there, else pgstat_init failed and we can do
+ * nothing useful.
*/
if (pgStatSock < 0)
return 0;
@@ -587,9 +587,10 @@ pgstat_start(void)
return 0;
}
-void allow_immediate_pgstat_restart(void)
+void
+allow_immediate_pgstat_restart(void)
{
- last_pgstat_start_time = 0;
+ last_pgstat_start_time = 0;
}
/* ------------------------------------------------------------
@@ -612,7 +613,7 @@ pgstat_report_tabstat(bool force)
{
/* we assume this inits to all zeroes: */
static const PgStat_TableCounts all_zeroes;
- static TimestampTz last_report = 0;
+ static TimestampTz last_report = 0;
TimestampTz now;
PgStat_MsgTabstat regular_msg;
@@ -638,8 +639,8 @@ pgstat_report_tabstat(bool force)
/*
* Scan through the TabStatusArray struct(s) to find tables that actually
* have counts, and build messages to send. We have to separate shared
- * relations from regular ones because the databaseid field in the
- * message header has to depend on that.
+ * relations from regular ones because the databaseid field in the message
+ * header has to depend on that.
*/
regular_msg.m_databaseid = MyDatabaseId;
shared_msg.m_databaseid = InvalidOid;
@@ -658,12 +659,13 @@ pgstat_report_tabstat(bool force)
Assert(entry->trans == NULL);
/*
- * Ignore entries that didn't accumulate any actual counts,
- * such as indexes that were opened by the planner but not used.
+ * Ignore entries that didn't accumulate any actual counts, such
+ * as indexes that were opened by the planner but not used.
*/
if (memcmp(&entry->t_counts, &all_zeroes,
sizeof(PgStat_TableCounts)) == 0)
continue;
+
/*
* OK, insert data into the appropriate message, and send if full.
*/
@@ -885,7 +887,7 @@ pgstat_collect_oids(Oid catalogid)
scan = heap_beginscan(rel, SnapshotNow, 0, NULL);
while ((tup = heap_getnext(scan, ForwardScanDirection)) != NULL)
{
- Oid thisoid = HeapTupleGetOid(tup);
+ Oid thisoid = HeapTupleGetOid(tup);
CHECK_FOR_INTERRUPTS();
@@ -950,7 +952,7 @@ pgstat_drop_relation(Oid relid)
msg.m_databaseid = MyDatabaseId;
pgstat_send(&msg, len);
}
-#endif /* NOT_USED */
+#endif /* NOT_USED */
/* ----------
@@ -1021,7 +1023,7 @@ pgstat_report_vacuum(Oid tableoid, bool shared,
msg.m_databaseid = shared ? InvalidOid : MyDatabaseId;
msg.m_tableoid = tableoid;
msg.m_analyze = analyze;
- msg.m_autovacuum = IsAutoVacuumWorkerProcess(); /* is this autovacuum? */
+ msg.m_autovacuum = IsAutoVacuumWorkerProcess(); /* is this autovacuum? */
msg.m_vacuumtime = GetCurrentTimestamp();
msg.m_tuples = tuples;
pgstat_send(&msg, sizeof(msg));
@@ -1045,7 +1047,7 @@ pgstat_report_analyze(Oid tableoid, bool shared, PgStat_Counter livetuples,
pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_ANALYZE);
msg.m_databaseid = shared ? InvalidOid : MyDatabaseId;
msg.m_tableoid = tableoid;
- msg.m_autovacuum = IsAutoVacuumWorkerProcess(); /* is this autovacuum? */
+ msg.m_autovacuum = IsAutoVacuumWorkerProcess(); /* is this autovacuum? */
msg.m_analyzetime = GetCurrentTimestamp();
msg.m_live_tuples = livetuples;
msg.m_dead_tuples = deadtuples;
@@ -1107,8 +1109,8 @@ pgstat_initstats(Relation rel)
}
/*
- * If we already set up this relation in the current transaction,
- * nothing to do.
+ * If we already set up this relation in the current transaction, nothing
+ * to do.
*/
if (rel->pgstat_info != NULL &&
rel->pgstat_info->t_id == rel_id)
@@ -1145,9 +1147,9 @@ get_tabstat_entry(Oid rel_id, bool isshared)
if (tsa->tsa_used < TABSTAT_QUANTUM)
{
/*
- * It must not be present, but we found a free slot instead.
- * Fine, let's use this one. We assume the entry was already
- * zeroed, either at creation or after last use.
+ * It must not be present, but we found a free slot instead. Fine,
+ * let's use this one. We assume the entry was already zeroed,
+ * either at creation or after last use.
*/
entry = &tsa->tsa_entries[tsa->tsa_used++];
entry->t_id = rel_id;
@@ -1201,14 +1203,14 @@ get_tabstat_stack_level(int nest_level)
* add_tabstat_xact_level - add a new (sub)transaction state record
*/
static void
-add_tabstat_xact_level(PgStat_TableStatus *pgstat_info, int nest_level)
+add_tabstat_xact_level(PgStat_TableStatus * pgstat_info, int nest_level)
{
PgStat_SubXactStatus *xact_state;
PgStat_TableXactStatus *trans;
/*
- * If this is the first rel to be modified at the current nest level,
- * we first have to push a transaction stack entry.
+ * If this is the first rel to be modified at the current nest level, we
+ * first have to push a transaction stack entry.
*/
xact_state = get_tabstat_stack_level(nest_level);
@@ -1234,7 +1236,7 @@ pgstat_count_heap_insert(Relation rel)
if (pgstat_track_counts && pgstat_info != NULL)
{
- int nest_level = GetCurrentTransactionNestLevel();
+ int nest_level = GetCurrentTransactionNestLevel();
/* t_tuples_inserted is nontransactional, so just advance it */
pgstat_info->t_counts.t_tuples_inserted++;
@@ -1258,7 +1260,7 @@ pgstat_count_heap_update(Relation rel, bool hot)
if (pgstat_track_counts && pgstat_info != NULL)
{
- int nest_level = GetCurrentTransactionNestLevel();
+ int nest_level = GetCurrentTransactionNestLevel();
/* t_tuples_updated is nontransactional, so just advance it */
pgstat_info->t_counts.t_tuples_updated++;
@@ -1287,7 +1289,7 @@ pgstat_count_heap_delete(Relation rel)
if (pgstat_track_counts && pgstat_info != NULL)
{
- int nest_level = GetCurrentTransactionNestLevel();
+ int nest_level = GetCurrentTransactionNestLevel();
/* t_tuples_deleted is nontransactional, so just advance it */
pgstat_info->t_counts.t_tuples_deleted++;
@@ -1341,8 +1343,8 @@ AtEOXact_PgStat(bool isCommit)
/*
* Transfer transactional insert/update counts into the base tabstat
- * entries. We don't bother to free any of the transactional state,
- * since it's all in TopTransactionContext and will go away anyway.
+ * entries. We don't bother to free any of the transactional state, since
+ * it's all in TopTransactionContext and will go away anyway.
*/
xact_state = pgStatXactStack;
if (xact_state != NULL)
@@ -1424,11 +1426,11 @@ AtEOSubXact_PgStat(bool isCommit, int nestDepth)
else
{
/*
- * When there isn't an immediate parent state, we can
- * just reuse the record instead of going through a
+ * When there isn't an immediate parent state, we can just
+ * reuse the record instead of going through a
* palloc/pfree pushup (this works since it's all in
- * TopTransactionContext anyway). We have to re-link
- * it into the parent level, though, and that might mean
+ * TopTransactionContext anyway). We have to re-link it
+ * into the parent level, though, and that might mean
* pushing a new entry into the pgStatXactStack.
*/
PgStat_SubXactStatus *upper_xact_state;
@@ -1500,7 +1502,7 @@ AtPrepare_PgStat(void)
* Clean up after successful PREPARE.
*
* All we need do here is unlink the transaction stats state from the
- * nontransactional state. The nontransactional action counts will be
+ * nontransactional state. The nontransactional action counts will be
* reported to the stats collector immediately, while the effects on live
* and dead tuple counts are preserved in the 2PC state file.
*
@@ -1512,8 +1514,8 @@ PostPrepare_PgStat(void)
PgStat_SubXactStatus *xact_state;
/*
- * We don't bother to free any of the transactional state,
- * since it's all in TopTransactionContext and will go away anyway.
+ * We don't bother to free any of the transactional state, since it's all
+ * in TopTransactionContext and will go away anyway.
*/
xact_state = pgStatXactStack;
if (xact_state != NULL)
@@ -1701,8 +1703,8 @@ pgstat_fetch_stat_numbackends(void)
* ---------
* pgstat_fetch_global() -
*
- * Support function for the SQL-callable pgstat* functions. Returns
- * a pointer to the global statistics struct.
+ * Support function for the SQL-callable pgstat* functions. Returns
+ * a pointer to the global statistics struct.
* ---------
*/
PgStat_GlobalStats *
@@ -1795,8 +1797,8 @@ pgstat_bestart(void)
volatile PgBackendStatus *beentry;
/*
- * To minimize the time spent modifying the PgBackendStatus entry,
- * fetch all the needed data first.
+ * To minimize the time spent modifying the PgBackendStatus entry, fetch
+ * all the needed data first.
*
* If we have a MyProcPort, use its session start time (for consistency,
* and to save a kernel call).
@@ -1930,8 +1932,8 @@ pgstat_report_xact_timestamp(TimestampTz tstamp)
/*
* Update my status entry, following the protocol of bumping
- * st_changecount before and after. We use a volatile pointer
- * here to ensure the compiler doesn't try to get cute.
+ * st_changecount before and after. We use a volatile pointer here to
+ * ensure the compiler doesn't try to get cute.
*/
beentry->st_changecount++;
beentry->st_xact_start_timestamp = tstamp;
@@ -2085,7 +2087,7 @@ pgstat_send(void *msg, int len)
/* ----------
* pgstat_send_bgwriter() -
*
- * Send bgwriter statistics to the collector
+ * Send bgwriter statistics to the collector
* ----------
*/
void
@@ -2095,9 +2097,9 @@ pgstat_send_bgwriter(void)
static const PgStat_MsgBgWriter all_zeroes;
/*
- * This function can be called even if nothing at all has happened.
- * In this case, avoid sending a completely empty message to
- * the stats collector.
+ * This function can be called even if nothing at all has happened. In
+ * this case, avoid sending a completely empty message to the stats
+ * collector.
*/
if (memcmp(&BgWriterStats, &all_zeroes, sizeof(PgStat_MsgBgWriter)) == 0)
return;
@@ -2145,13 +2147,13 @@ PgstatCollectorMain(int argc, char *argv[])
MyProcPid = getpid(); /* reset MyProcPid */
- MyStartTime = time(NULL); /* record Start Time for logging */
+ MyStartTime = time(NULL); /* record Start Time for logging */
/*
* If possible, make this process a group leader, so that the postmaster
- * can signal any child processes too. (pgstat probably never has
- * any child processes, but for consistency we make all postmaster
- * child processes do this.)
+ * can signal any child processes too. (pgstat probably never has any
+ * child processes, but for consistency we make all postmaster child
+ * processes do this.)
*/
#ifdef HAVE_SETSID
if (setsid() < 0)
@@ -2250,8 +2252,8 @@ PgstatCollectorMain(int argc, char *argv[])
* poll/select call, so this also limits speed of response to SIGQUIT,
* which is more important.)
*
- * We use poll(2) if available, otherwise select(2).
- * Win32 has its own implementation.
+ * We use poll(2) if available, otherwise select(2). Win32 has its own
+ * implementation.
*/
#ifndef WIN32
#ifdef HAVE_POLL
@@ -2291,9 +2293,9 @@ PgstatCollectorMain(int argc, char *argv[])
got_data = FD_ISSET(pgStatSock, &rfds);
#endif /* HAVE_POLL */
-#else /* WIN32 */
+#else /* WIN32 */
got_data = pgwin32_waitforsinglesocket(pgStatSock, FD_READ,
- PGSTAT_SELECT_TIMEOUT*1000);
+ PGSTAT_SELECT_TIMEOUT * 1000);
#endif
/*
@@ -2363,7 +2365,7 @@ PgstatCollectorMain(int argc, char *argv[])
break;
case PGSTAT_MTYPE_BGWRITER:
- pgstat_recv_bgwriter((PgStat_MsgBgWriter *) &msg, len);
+ pgstat_recv_bgwriter((PgStat_MsgBgWriter *) & msg, len);
break;
default:
@@ -2704,7 +2706,7 @@ pgstat_read_statsfile(Oid onlydb)
dbentry->tables = hash_create("Per-database table",
PGSTAT_TAB_HASH_SIZE,
&hash_ctl,
- HASH_ELEM | HASH_FUNCTION | HASH_CONTEXT);
+ HASH_ELEM | HASH_FUNCTION | HASH_CONTEXT);
/*
* Arrange that following 'T's add entries to this database's
@@ -2813,7 +2815,7 @@ pgstat_setup_memcxt(void)
/* ----------
* pgstat_clear_snapshot() -
*
- * Discard any data collected in the current transaction. Any subsequent
+ * Discard any data collected in the current transaction. Any subsequent
* request will cause new snapshots to be read.
*
* This is also invoked during transaction commit or abort to discard
@@ -3158,7 +3160,7 @@ pgstat_recv_analyze(PgStat_MsgAnalyze *msg, int len)
* ----------
*/
static void
-pgstat_recv_bgwriter(PgStat_MsgBgWriter *msg, int len)
+pgstat_recv_bgwriter(PgStat_MsgBgWriter * msg, int len)
{
globalStats.timed_checkpoints += msg->m_timed_checkpoints;
globalStats.requested_checkpoints += msg->m_requested_checkpoints;