On 6.4.2013 21:51, Tomas Vondra wrote:
> Hi,
> 
> I'm regularly using pg_stat_database view to analyze various aspects of
> behavior of the cluster. The #1 issue I'm constantly running into is
> that to get cluster-level view (across all the databases), the table
> needs to be aggregated like this:
> 
>     SELECT
>         SUM(blks_hit) blks_hit,
>         SUM(blks_read) blks_read
>     FROM pg_stat_database
> 
> This more or less works in stable environments, but once you start
> dropping databases (think of hosting with shared DB server) it gets
> unusable because after DROP DATABASE the database suddenly disappears
> from the sum.
> 
> Therefore I do propose tracking the aggregated stats, similar to the
> pg_stat_bgwriter view. This does not require new messages (thanks to
> reuse of the existing messages), and I expect the overhead to be
> negligible (a few bytes of storage, minimal CPU).
> 
> I think it does not make sense to merge this into pg_stat_bgwriter,
> creating a new view (can't think of a good name though), seems like a
> much better choice to me.

Attached is a first version of the patch, just to illustrate the idea.
It creates a new system view pg_stat_agg_database with aggregated data.
There are no docs, no regression tests etc.

Now, I'm thinking if we should do something similar with database object
(table/index) stats, i.e. keep maintain aggregated data. This might seem
silly at first, but consider for example a partitioned table. It's
common to have a db-level metrics on idx/seq_scans, but when you drop a
partition (e.g. the oldest one), you may get into the same trouble as
with database stats (see my previous post).

So I think it would be handy to define table/index stats aggregated at
the db-level, i.e. there would be one row for each database. I don't
think it makes much sense to aggregate vacuum/analyze info (counts and
timestamps), which means 18 BIGINT counters from pg_stat[io]_tables, and
10 BIGINT counters from pg_stat[io]_indexes. That's 224B for each
database, which I believe is negligible.

OTOH it would be very handy to have this info aggretated per-schema and
per-tablespace, but I'd say to do that later in a separate patch.

Opinions?

Tomas
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql
index 57adbf6..28f3ca2 100644
--- a/src/backend/catalog/system_views.sql
+++ b/src/backend/catalog/system_views.sql
@@ -636,6 +636,27 @@ CREATE VIEW pg_stat_database AS
             pg_stat_get_db_stat_reset_time(D.oid) AS stats_reset
     FROM pg_database D;
 
+CREATE VIEW pg_stat_agg_database AS
+    SELECT
+            pg_stat_get_all_numbackends() AS numbackends,
+            pg_stat_get_all_xact_commit() AS xact_commit,
+            pg_stat_get_all_xact_rollback() AS xact_rollback,
+            pg_stat_get_all_blocks_fetched() -
+                    pg_stat_get_all_blocks_hit() AS blks_read,
+            pg_stat_get_all_blocks_hit() AS blks_hit,
+            pg_stat_get_all_tuples_returned() AS tup_returned,
+            pg_stat_get_all_tuples_fetched() AS tup_fetched,
+            pg_stat_get_all_tuples_inserted() AS tup_inserted,
+            pg_stat_get_all_tuples_updated() AS tup_updated,
+            pg_stat_get_all_tuples_deleted() AS tup_deleted,
+            pg_stat_get_all_conflict_all() AS conflicts,
+            pg_stat_get_all_temp_files() AS temp_files,
+            pg_stat_get_all_temp_bytes() AS temp_bytes,
+            pg_stat_get_all_deadlocks() AS deadlocks,
+            pg_stat_get_all_blk_read_time() AS blk_read_time,
+            pg_stat_get_all_blk_write_time() AS blk_write_time,
+            pg_stat_get_bgwriter_stat_reset_time() AS stats_reset;
+
 CREATE VIEW pg_stat_database_conflicts AS
     SELECT
             D.oid AS datid,
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 29d986a..121794d 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -4478,6 +4478,12 @@ pgstat_recv_tabstat(PgStat_MsgTabstat *msg, int len)
 	int			i;
 	bool		found;
 
+	/* update aggregated data first */
+	globalStats.n_xact_commit += (PgStat_Counter) (msg->m_xact_commit);
+	globalStats.n_xact_rollback += (PgStat_Counter) (msg->m_xact_rollback);
+	globalStats.n_block_read_time += msg->m_block_read_time;
+	globalStats.n_block_write_time += msg->m_block_write_time;
+
 	dbentry = pgstat_get_db_entry(msg->m_databaseid, true);
 
 	/*
@@ -4561,6 +4567,15 @@ pgstat_recv_tabstat(PgStat_MsgTabstat *msg, int len)
 		dbentry->n_tuples_deleted += tabmsg->t_counts.t_tuples_deleted;
 		dbentry->n_blocks_fetched += tabmsg->t_counts.t_blocks_fetched;
 		dbentry->n_blocks_hit += tabmsg->t_counts.t_blocks_hit;
+
+		/* update the aggregated counters too */
+		globalStats.n_blocks_fetched += tabmsg->t_counts.t_blocks_fetched;
+		globalStats.n_blocks_hit += tabmsg->t_counts.t_blocks_hit;
+		globalStats.n_tuples_returned += tabmsg->t_counts.t_tuples_returned;
+		globalStats.n_tuples_fetched += tabmsg->t_counts.t_tuples_fetched;
+		globalStats.n_tuples_inserted += tabmsg->t_counts.t_tuples_inserted;
+		globalStats.n_tuples_updated += tabmsg->t_counts.t_tuples_updated;
+		globalStats.n_tuples_deleted += tabmsg->t_counts.t_tuples_deleted;
 	}
 }
 
@@ -4869,18 +4884,23 @@ pgstat_recv_recoveryconflict(PgStat_MsgRecoveryConflict *msg, int len)
 			break;
 		case PROCSIG_RECOVERY_CONFLICT_TABLESPACE:
 			dbentry->n_conflict_tablespace++;
+			globalStats.n_conflict_tablespace++;
 			break;
 		case PROCSIG_RECOVERY_CONFLICT_LOCK:
 			dbentry->n_conflict_lock++;
+			globalStats.n_conflict_lock++;
 			break;
 		case PROCSIG_RECOVERY_CONFLICT_SNAPSHOT:
 			dbentry->n_conflict_snapshot++;
+			globalStats.n_conflict_snapshot++;
 			break;
 		case PROCSIG_RECOVERY_CONFLICT_BUFFERPIN:
 			dbentry->n_conflict_bufferpin++;
+			globalStats.n_conflict_bufferpin++;
 			break;
 		case PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK:
 			dbentry->n_conflict_startup_deadlock++;
+			globalStats.n_conflict_startup_deadlock++;
 			break;
 	}
 }
@@ -4899,6 +4919,7 @@ pgstat_recv_deadlock(PgStat_MsgDeadlock *msg, int len)
 	dbentry = pgstat_get_db_entry(msg->m_databaseid, true);
 
 	dbentry->n_deadlocks++;
+	globalStats.n_deadlocks++;
 }
 
 /* ----------
@@ -4916,6 +4937,9 @@ pgstat_recv_tempfile(PgStat_MsgTempFile *msg, int len)
 
 	dbentry->n_temp_bytes += msg->m_filesize;
 	dbentry->n_temp_files += 1;
+	
+	globalStats.n_temp_bytes += msg->m_filesize;
+	globalStats.n_temp_files += 1;
 }
 
 /* ----------
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 8c1a767..f3fd59e 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -98,6 +98,28 @@ extern Datum pg_stat_get_buf_written_backend(PG_FUNCTION_ARGS);
 extern Datum pg_stat_get_buf_fsync_backend(PG_FUNCTION_ARGS);
 extern Datum pg_stat_get_buf_alloc(PG_FUNCTION_ARGS);
 
+extern Datum pg_stat_get_all_numbackends(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_xact_commit(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_xact_rollback(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_blocks_fetched(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_blocks_hit(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_tuples_returned(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_tuples_fetched(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_tuples_inserted(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_tuples_updated(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_tuples_deleted(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_conflict_tablespace(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_conflict_lock(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_conflict_snapshot(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_conflict_bufferpin(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_conflict_startup_deadlock(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_conflict_all(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_deadlocks(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_temp_files(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_temp_bytes(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_blk_read_time(PG_FUNCTION_ARGS);
+extern Datum pg_stat_get_all_blk_write_time(PG_FUNCTION_ARGS);
+
 extern Datum pg_stat_get_xact_numscans(PG_FUNCTION_ARGS);
 extern Datum pg_stat_get_xact_tuples_returned(PG_FUNCTION_ARGS);
 extern Datum pg_stat_get_xact_tuples_fetched(PG_FUNCTION_ARGS);
@@ -1458,6 +1480,152 @@ pg_stat_get_buf_alloc(PG_FUNCTION_ARGS)
 }
 
 Datum
+pg_stat_get_all_numbackends(PG_FUNCTION_ARGS)
+{
+
+	int32		result;
+	int		tot_backends = pgstat_fetch_stat_numbackends();
+	int		beid;
+
+	result = 0;
+	for (beid = 1; beid <= tot_backends; beid++)
+	{
+		PgBackendStatus *beentry = pgstat_fetch_stat_beentry(beid);
+		if (beentry)
+			result++;
+	}
+
+	PG_RETURN_INT32(result);
+	
+}
+
+Datum
+pg_stat_get_all_xact_commit(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_xact_commit);
+}
+
+Datum
+pg_stat_get_all_xact_rollback(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_xact_rollback);
+}
+
+Datum
+pg_stat_get_all_blocks_fetched(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_blocks_fetched);
+}
+
+Datum
+pg_stat_get_all_blocks_hit(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_blocks_hit);
+}
+
+Datum
+pg_stat_get_all_tuples_returned(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_tuples_returned);
+}
+
+Datum
+pg_stat_get_all_tuples_fetched(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_tuples_fetched);
+}
+
+Datum
+pg_stat_get_all_tuples_inserted(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_tuples_inserted);
+}
+
+Datum
+pg_stat_get_all_tuples_updated(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_tuples_updated);
+}
+
+Datum
+pg_stat_get_all_tuples_deleted(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_tuples_deleted);
+}
+
+Datum
+pg_stat_get_all_conflict_tablespace(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_conflict_tablespace);
+}
+
+Datum
+pg_stat_get_all_conflict_lock(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_conflict_lock);
+}
+
+Datum
+pg_stat_get_all_conflict_snapshot(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_conflict_snapshot);
+}
+
+Datum
+pg_stat_get_all_conflict_bufferpin(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_conflict_bufferpin);
+}
+
+Datum
+pg_stat_get_all_conflict_startup_deadlock(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_conflict_startup_deadlock);
+}
+
+Datum
+pg_stat_get_all_conflict_all(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(
+		pgstat_fetch_global()->n_conflict_tablespace +
+		pgstat_fetch_global()->n_conflict_lock +
+		pgstat_fetch_global()->n_conflict_snapshot +
+		pgstat_fetch_global()->n_conflict_bufferpin +
+		pgstat_fetch_global()->n_conflict_bufferpin
+	);
+}
+
+Datum
+pg_stat_get_all_deadlocks(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_deadlocks);
+}
+
+Datum
+pg_stat_get_all_temp_files(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_temp_files);
+}
+
+Datum 
+pg_stat_get_all_temp_bytes(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_INT64(pgstat_fetch_global()->n_temp_bytes);
+}
+
+Datum
+pg_stat_get_all_blk_read_time(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_FLOAT8(((double) pgstat_fetch_global()->n_block_read_time) / 1000.0);
+}
+
+Datum
+pg_stat_get_all_blk_write_time(PG_FUNCTION_ARGS)
+{
+	PG_RETURN_FLOAT8(((double) pgstat_fetch_global()->n_block_write_time) / 1000.0);
+}
+
+Datum
 pg_stat_get_xact_numscans(PG_FUNCTION_ARGS)
 {
 	Oid			relid = PG_GETARG_OID(0);
diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h
index 4d5cd9f..5f91bf3 100644
--- a/src/include/catalog/pg_proc.h
+++ b/src/include/catalog/pg_proc.h
@@ -2710,6 +2710,50 @@ DESCR("statistics: number of backend buffer writes that did their own fsync");
 DATA(insert OID = 2859 ( pg_stat_get_buf_alloc			PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_buf_alloc _null_ _null_ _null_ ));
 DESCR("statistics: number of buffer allocations");
 
+DATA(insert OID = 3900 (  pg_stat_get_all_numbackends	PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_numbackends _null_ _null_ _null_ ));
+DESCR("statistics: transactions committed");
+DATA(insert OID = 2860 (  pg_stat_get_all_xact_commit	PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_xact_commit _null_ _null_ _null_ ));
+DESCR("statistics: transactions committed");
+DATA(insert OID = 2861 (  pg_stat_get_all_xact_rollback	PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_xact_rollback _null_ _null_ _null_ ));
+DESCR("statistics: transactions rolled back");
+DATA(insert OID = 2862 (  pg_stat_get_all_blocks_fetched PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_blocks_fetched _null_ _null_ _null_ ));
+DESCR("statistics: blocks fetched");
+DATA(insert OID = 2863 (  pg_stat_get_all_blocks_hit		PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_blocks_hit _null_ _null_ _null_ ));
+DESCR("statistics: blocks found in cache");
+DATA(insert OID = 2864 (  pg_stat_get_all_tuples_returned PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_tuples_returned _null_ _null_ _null_ ));
+DESCR("statistics: tuples returned");
+DATA(insert OID = 2865 (  pg_stat_get_all_tuples_fetched PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_tuples_fetched _null_ _null_ _null_ ));
+DESCR("statistics: tuples fetched");
+DATA(insert OID = 2866 (  pg_stat_get_all_tuples_inserted PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_tuples_inserted _null_ _null_ _null_ ));
+DESCR("statistics: tuples inserted");
+DATA(insert OID = 2867 (  pg_stat_get_all_tuples_updated PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_tuples_updated _null_ _null_ _null_ ));
+DESCR("statistics: tuples updated");
+DATA(insert OID = 2868 (  pg_stat_get_all_tuples_deleted PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_tuples_deleted _null_ _null_ _null_ ));
+DESCR("statistics: tuples deleted");
+DATA(insert OID = 2869 (  pg_stat_get_all_conflict_tablespace PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_conflict_tablespace _null_ _null_ _null_ ));
+DESCR("statistics: recovery conflicts caused by drop tablespace");
+DATA(insert OID = 2870 (  pg_stat_get_all_conflict_lock PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_conflict_lock _null_ _null_ _null_ ));
+DESCR("statistics: recovery conflicts caused by relation lock");
+DATA(insert OID = 2871 (  pg_stat_get_all_conflict_snapshot PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_conflict_snapshot _null_ _null_ _null_ ));
+DESCR("statistics: recovery conflicts caused by snapshot expiry");
+DATA(insert OID = 2872 (  pg_stat_get_all_conflict_bufferpin PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_conflict_bufferpin _null_ _null_ _null_ ));
+DESCR("statistics: recovery conflicts caused by shared buffer pin");
+DATA(insert OID = 2873 (  pg_stat_get_all_conflict_startup_deadlock PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_conflict_startup_deadlock _null_ _null_ _null_ ));
+DESCR("statistics: recovery conflicts caused by buffer deadlock");
+DATA(insert OID = 2874 (  pg_stat_get_all_conflict_all PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_conflict_all _null_ _null_ _null_ ));
+DESCR("statistics: recovery conflicts");
+DATA(insert OID = 2875 (  pg_stat_get_all_deadlocks PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_deadlocks _null_ _null_ _null_ ));
+DESCR("statistics: deadlocks detected");
+
+DATA(insert OID = 2876 (  pg_stat_get_all_temp_files PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_temp_files _null_ _null_ _null_ ));
+DESCR("statistics: number of temporary files written");
+DATA(insert OID = 2877 (  pg_stat_get_all_temp_bytes PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 20 "" _null_ _null_ _null_ _null_ pg_stat_get_all_temp_bytes _null_ _null_ _null_ ));
+DESCR("statistics: number of bytes in temporary files written");
+DATA(insert OID = 2976 (  pg_stat_get_all_blk_read_time	PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 701 "" _null_ _null_ _null_ _null_ pg_stat_get_all_blk_read_time _null_ _null_ _null_ ));
+DESCR("statistics: block read time, in msec");
+DATA(insert OID = 2977 (  pg_stat_get_all_blk_write_time PGNSP PGUID 12 1 0 0 0 f f f f t f s 0 0 701 "" _null_ _null_ _null_ _null_ pg_stat_get_all_blk_write_time _null_ _null_ _null_ ));
+DESCR("statistics: block write time, in msec");
+
 DATA(insert OID = 2978 (  pg_stat_get_function_calls		PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 20 "26" _null_ _null_ _null_ _null_ pg_stat_get_function_calls _null_ _null_ _null_ ));
 DESCR("statistics: number of function calls");
 DATA(insert OID = 2979 (  pg_stat_get_function_total_time	PGNSP PGUID 12 1 0 0 0 f f f f t f s 1 0 701 "26" _null_ _null_ _null_ _null_ pg_stat_get_function_total_time _null_ _null_ _null_ ));
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index fb242e4..1ff6e7d 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -624,6 +624,28 @@ typedef struct PgStat_GlobalStats
 	PgStat_Counter buf_written_backend;
 	PgStat_Counter buf_fsync_backend;
 	PgStat_Counter buf_alloc;
+	
+	/* aggregated data from PgStat_StatDBEntry */
+	PgStat_Counter n_xact_commit;
+	PgStat_Counter n_xact_rollback;
+	PgStat_Counter n_blocks_fetched;
+	PgStat_Counter n_blocks_hit;
+	PgStat_Counter n_tuples_returned;
+	PgStat_Counter n_tuples_fetched;
+	PgStat_Counter n_tuples_inserted;
+	PgStat_Counter n_tuples_updated;
+	PgStat_Counter n_tuples_deleted;
+	PgStat_Counter n_conflict_tablespace;
+	PgStat_Counter n_conflict_lock;
+	PgStat_Counter n_conflict_snapshot;
+	PgStat_Counter n_conflict_bufferpin;
+	PgStat_Counter n_conflict_startup_deadlock;
+	PgStat_Counter n_temp_files;
+	PgStat_Counter n_temp_bytes;
+	PgStat_Counter n_deadlocks;
+	PgStat_Counter n_block_read_time;	/* times in microseconds */
+	PgStat_Counter n_block_write_time;
+	
 	TimestampTz stat_reset_timestamp;
 } PgStat_GlobalStats;
 
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to