mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
Add vacuum and analyze counters to pg_stat_*_tables views.
This commit is contained in:
parent
efe2e9a758
commit
946045f04d
@ -1,4 +1,4 @@
|
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/monitoring.sgml,v 1.84 2010/08/17 04:37:20 petere Exp $ -->
|
||||
<!-- $PostgreSQL: pgsql/doc/src/sgml/monitoring.sgml,v 1.85 2010/08/21 10:59:17 mha Exp $ -->
|
||||
|
||||
<chapter id="monitoring">
|
||||
<title>Monitoring Database Activity</title>
|
||||
@ -117,9 +117,9 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
|
||||
is a subsystem that supports collection and reporting of information about
|
||||
server activity. Presently, the collector can count accesses to tables
|
||||
and indexes in both disk-block and individual-row terms. It also tracks
|
||||
the total number of rows in each table, and the last vacuum and analyze times
|
||||
for each table. It can also count calls to user-defined functions and
|
||||
the total time spent in each one.
|
||||
the total number of rows in each table, and information about vacuum and
|
||||
analyze actions for each table. It can also count calls to user-defined
|
||||
functions and the total time spent in each one.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -293,7 +293,11 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
|
||||
the last time the table was vacuumed manually,
|
||||
the last time it was vacuumed by the autovacuum daemon,
|
||||
the last time it was analyzed manually,
|
||||
and the last time it was analyzed by the autovacuum daemon.
|
||||
the last time it was analyzed by the autovacuum daemon,
|
||||
number of times it has been vacuumed manually,
|
||||
number of times it has been vacuumed by the autovacuum daemon,
|
||||
number of times it has been analyzed manually,
|
||||
and the number of times it has been analyzed by the autovacuum daemon.
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
@ -314,8 +318,8 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
|
||||
<entry>Similar to <structname>pg_stat_all_tables</>, but counts actions
|
||||
taken so far within the current transaction (which are <emphasis>not</>
|
||||
yet included in <structname>pg_stat_all_tables</> and related views).
|
||||
The columns for numbers of live and dead rows and last-vacuum and
|
||||
last-analyze times are not present in this view.</entry>
|
||||
The columns for numbers of live and dead rows and vacuum and
|
||||
analyze actions are not present in this view.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
@ -718,6 +722,38 @@ postgres: <replaceable>user</> <replaceable>database</> <replaceable>host</> <re
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><literal><function>pg_stat_get_vacuum_count</function>(<type>oid</type>)</literal></entry>
|
||||
<entry><type>bigint</type></entry>
|
||||
<entry>
|
||||
The number of times this table has been vacuumed manually
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><literal><function>pg_stat_get_autovacuum_count</function>(<type>oid</type>)</literal></entry>
|
||||
<entry><type>bigint</type></entry>
|
||||
<entry>
|
||||
The number of times this table has been vacuumed by the autovacuum daemon
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><literal><function>pg_stat_get_analyze_count</function>(<type>oid</type>)</literal></entry>
|
||||
<entry><type>bigint</type></entry>
|
||||
<entry>
|
||||
The number of times this table has been analyzed manually
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><literal><function>pg_stat_get_autoanalyze_count</function>(<type>oid</type>)</literal></entry>
|
||||
<entry><type>bigint</type></entry>
|
||||
<entry>
|
||||
The number of times this table has been analyzed by the autovacuum daemon
|
||||
</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><literal><function>pg_stat_get_xact_numscans</function>(<type>oid</type>)</literal></entry>
|
||||
<entry><type>bigint</type></entry>
|
||||
|
@ -3,7 +3,7 @@
|
||||
*
|
||||
* Copyright (c) 1996-2010, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.67 2010/08/08 16:27:03 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/catalog/system_views.sql,v 1.68 2010/08/21 10:59:17 mha Exp $
|
||||
*/
|
||||
|
||||
CREATE VIEW pg_roles AS
|
||||
@ -201,7 +201,11 @@ CREATE VIEW pg_stat_all_tables AS
|
||||
pg_stat_get_last_vacuum_time(C.oid) as last_vacuum,
|
||||
pg_stat_get_last_autovacuum_time(C.oid) as last_autovacuum,
|
||||
pg_stat_get_last_analyze_time(C.oid) as last_analyze,
|
||||
pg_stat_get_last_autoanalyze_time(C.oid) as last_autoanalyze
|
||||
pg_stat_get_last_autoanalyze_time(C.oid) as last_autoanalyze,
|
||||
pg_stat_get_vacuum_count(C.oid) AS vacuum_count,
|
||||
pg_stat_get_autovacuum_count(C.oid) AS autovacuum_count,
|
||||
pg_stat_get_analyze_count(C.oid) AS analyze_count,
|
||||
pg_stat_get_autoanalyze_count(C.oid) AS autoanalyze_count
|
||||
FROM pg_class C LEFT JOIN
|
||||
pg_index I ON C.oid = I.indrelid
|
||||
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
|
||||
|
@ -13,7 +13,7 @@
|
||||
*
|
||||
* Copyright (c) 2001-2010, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.205 2010/08/08 16:27:03 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.206 2010/08/21 10:59:17 mha Exp $
|
||||
* ----------
|
||||
*/
|
||||
#include "postgres.h"
|
||||
@ -3192,6 +3192,10 @@ pgstat_get_tab_entry(PgStat_StatDBEntry *dbentry, Oid tableoid, bool create)
|
||||
result->autovac_vacuum_timestamp = 0;
|
||||
result->analyze_timestamp = 0;
|
||||
result->autovac_analyze_timestamp = 0;
|
||||
result->vacuum_count = 0;
|
||||
result->autovac_vacuum_count = 0;
|
||||
result->analyze_count = 0;
|
||||
result->autovac_analyze_count = 0;
|
||||
}
|
||||
|
||||
return result;
|
||||
@ -4114,9 +4118,15 @@ pgstat_recv_vacuum(PgStat_MsgVacuum *msg, int len)
|
||||
tabentry->n_dead_tuples = 0;
|
||||
|
||||
if (msg->m_autovacuum)
|
||||
{
|
||||
tabentry->autovac_vacuum_timestamp = msg->m_vacuumtime;
|
||||
tabentry->autovac_vacuum_count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
tabentry->vacuum_timestamp = msg->m_vacuumtime;
|
||||
tabentry->vacuum_count++;
|
||||
}
|
||||
}
|
||||
|
||||
/* ----------
|
||||
@ -4151,9 +4161,15 @@ pgstat_recv_analyze(PgStat_MsgAnalyze *msg, int len)
|
||||
tabentry->changes_since_analyze = 0;
|
||||
|
||||
if (msg->m_autovacuum)
|
||||
{
|
||||
tabentry->autovac_analyze_timestamp = msg->m_analyzetime;
|
||||
tabentry->autovac_analyze_count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
tabentry->analyze_timestamp = msg->m_analyzetime;
|
||||
tabentry->analyze_count++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/pgstatfuncs.c,v 1.61 2010/08/08 16:27:04 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/pgstatfuncs.c,v 1.62 2010/08/21 10:59:17 mha Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -38,6 +38,10 @@ extern Datum pg_stat_get_last_vacuum_time(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_stat_get_last_autovacuum_time(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_stat_get_last_analyze_time(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_stat_get_last_autoanalyze_time(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_stat_get_vacuum_count(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_stat_get_autovacuum_count(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_stat_get_analyze_count(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_stat_get_autoanalyze_count(PG_FUNCTION_ARGS);
|
||||
|
||||
extern Datum pg_stat_get_function_calls(PG_FUNCTION_ARGS);
|
||||
extern Datum pg_stat_get_function_time(PG_FUNCTION_ARGS);
|
||||
@ -346,6 +350,66 @@ pg_stat_get_last_autoanalyze_time(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_TIMESTAMPTZ(result);
|
||||
}
|
||||
|
||||
Datum
|
||||
pg_stat_get_vacuum_count(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid relid = PG_GETARG_OID(0);
|
||||
int64 result;
|
||||
PgStat_StatTabEntry *tabentry;
|
||||
|
||||
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
|
||||
result = 0;
|
||||
else
|
||||
result = (int64) (tabentry->vacuum_count);
|
||||
|
||||
PG_RETURN_INT64(result);
|
||||
}
|
||||
|
||||
Datum
|
||||
pg_stat_get_autovacuum_count(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid relid = PG_GETARG_OID(0);
|
||||
int64 result;
|
||||
PgStat_StatTabEntry *tabentry;
|
||||
|
||||
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
|
||||
result = 0;
|
||||
else
|
||||
result = (int64) (tabentry->autovac_vacuum_count);
|
||||
|
||||
PG_RETURN_INT64(result);
|
||||
}
|
||||
|
||||
Datum
|
||||
pg_stat_get_analyze_count(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid relid = PG_GETARG_OID(0);
|
||||
int64 result;
|
||||
PgStat_StatTabEntry *tabentry;
|
||||
|
||||
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
|
||||
result = 0;
|
||||
else
|
||||
result = (int64) (tabentry->analyze_count);
|
||||
|
||||
PG_RETURN_INT64(result);
|
||||
}
|
||||
|
||||
Datum
|
||||
pg_stat_get_autoanalyze_count(PG_FUNCTION_ARGS)
|
||||
{
|
||||
Oid relid = PG_GETARG_OID(0);
|
||||
int64 result;
|
||||
PgStat_StatTabEntry *tabentry;
|
||||
|
||||
if ((tabentry = pgstat_fetch_stat_tabentry(relid)) == NULL)
|
||||
result = 0;
|
||||
else
|
||||
result = (int64) (tabentry->autovac_analyze_count);
|
||||
|
||||
PG_RETURN_INT64(result);
|
||||
}
|
||||
|
||||
Datum
|
||||
pg_stat_get_function_calls(PG_FUNCTION_ARGS)
|
||||
{
|
||||
|
@ -37,7 +37,7 @@
|
||||
* Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.595 2010/08/13 18:36:24 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/catalog/catversion.h,v 1.596 2010/08/21 10:59:17 mha Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -53,6 +53,6 @@
|
||||
*/
|
||||
|
||||
/* yyyymmddN */
|
||||
#define CATALOG_VERSION_NO 201008131
|
||||
#define CATALOG_VERSION_NO 201008211
|
||||
|
||||
#endif
|
||||
|
@ -7,7 +7,7 @@
|
||||
* Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.579 2010/08/13 18:36:25 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/catalog/pg_proc.h,v 1.580 2010/08/21 10:59:17 mha Exp $
|
||||
*
|
||||
* NOTES
|
||||
* The script catalog/genbki.pl reads this file and generates .bki
|
||||
@ -3029,6 +3029,14 @@ DATA(insert OID = 2783 ( pg_stat_get_last_analyze_time PGNSP PGUID 12 1 0 0 f f
|
||||
DESCR("statistics: last manual analyze time for a table");
|
||||
DATA(insert OID = 2784 ( pg_stat_get_last_autoanalyze_time PGNSP PGUID 12 1 0 0 f f f t f s 1 0 1184 "26" _null_ _null_ _null_ _null_ pg_stat_get_last_autoanalyze_time _null_ _null_ _null_ ));
|
||||
DESCR("statistics: last auto analyze time for a table");
|
||||
DATA(insert OID = 3054 ( pg_stat_get_vacuum_count PGNSP PGUID 12 1 0 0 f f f t f s 1 0 20 "26" _null_ _null_ _null_ _null_ pg_stat_get_vacuum_count _null_ _null_ _null_ ));
|
||||
DESCR("statistics: number of manual vacuums for a table");
|
||||
DATA(insert OID = 3055 ( pg_stat_get_autovacuum_count PGNSP PGUID 12 1 0 0 f f f t f s 1 0 20 "26" _null_ _null_ _null_ _null_ pg_stat_get_autovacuum_count _null_ _null_ _null_ ));
|
||||
DESCR("statistics: number of auto vacuums for a table");
|
||||
DATA(insert OID = 3056 ( pg_stat_get_analyze_count PGNSP PGUID 12 1 0 0 f f f t f s 1 0 20 "26" _null_ _null_ _null_ _null_ pg_stat_get_analyze_count _null_ _null_ _null_ ));
|
||||
DESCR("statistics: number of manual analyzes for a table");
|
||||
DATA(insert OID = 3057 ( pg_stat_get_autoanalyze_count PGNSP PGUID 12 1 0 0 f f f t f s 1 0 20 "26" _null_ _null_ _null_ _null_ pg_stat_get_autoanalyze_count _null_ _null_ _null_ ));
|
||||
DESCR("statistics: number of auto analyzes for a table");
|
||||
DATA(insert OID = 1936 ( pg_stat_get_backend_idset PGNSP PGUID 12 1 100 0 f f f t t s 0 0 23 "" _null_ _null_ _null_ _null_ pg_stat_get_backend_idset _null_ _null_ _null_ ));
|
||||
DESCR("statistics: currently active backend IDs");
|
||||
DATA(insert OID = 2022 ( pg_stat_get_activity PGNSP PGUID 12 1 100 0 f f f f t s 1 0 2249 "23" "{23,26,23,26,25,25,16,1184,1184,1184,869,23}" "{i,o,o,o,o,o,o,o,o,o,o,o}" "{pid,datid,procpid,usesysid,application_name,current_query,waiting,xact_start,query_start,backend_start,client_addr,client_port}" _null_ pg_stat_get_activity _null_ _null_ _null_ ));
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* Copyright (c) 2001-2010, PostgreSQL Global Development Group
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/pgstat.h,v 1.90 2010/08/08 16:27:06 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/pgstat.h,v 1.91 2010/08/21 10:59:17 mha Exp $
|
||||
* ----------
|
||||
*/
|
||||
#ifndef PGSTAT_H
|
||||
@ -525,9 +525,13 @@ typedef struct PgStat_StatTabEntry
|
||||
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;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user