On Wed, Jan 29, 2014 at 10:38 PM, Michael Paquier
<[email protected]> wrote:
> On Sat, Jan 25, 2014 at 5:41 AM, Fujii Masao <[email protected]> wrote:
>> I think that it's time to rename all the variables related to
>> pg_stat_bgwriter.
>> For example, it's better to change PgStat_GlobalStats to PgStat_Bgwriter.
>> I think that it's okay to make this change as separate patch, though.
> Please find attached a simple patch renaming PgStat_GlobalStats to
> PgStat_BgWriterStats.
And of course I forgot the patch... Now attached.
--
Michael
*** a/src/backend/postmaster/pgstat.c
--- b/src/backend/postmaster/pgstat.c
***************
*** 221,228 **** static int localNumBackends = 0;
* Contains statistics that are not collected per database
* or per table.
*/
static PgStat_ArchiverStats archiverStats;
! static PgStat_GlobalStats globalStats;
/* Write request info for each database */
typedef struct DBWriteRequest
--- 221,229 ----
* Contains statistics that are not collected per database
* or per table.
*/
+ static TimestampTz global_stat_timestamp;
static PgStat_ArchiverStats archiverStats;
! static PgStat_BgWriterStats bgwriterStats;
/* Write request info for each database */
typedef struct DBWriteRequest
***************
*** 2344,2361 **** pgstat_fetch_stat_archiver(void)
/*
* ---------
! * pgstat_fetch_global() -
*
* Support function for the SQL-callable pgstat* functions. Returns
! * a pointer to the global statistics struct.
* ---------
*/
! PgStat_GlobalStats *
! pgstat_fetch_global(void)
{
backend_read_statsfile();
! return &globalStats;
}
--- 2345,2362 ----
/*
* ---------
! * pgstat_fetch_stat_bgwriter() -
*
* Support function for the SQL-callable pgstat* functions. Returns
! * a pointer to the bgwriter statistics struct.
* ---------
*/
! PgStat_BgWriterStats *
! pgstat_fetch_stat_bgwriter(void)
{
backend_read_statsfile();
! return &bgwriterStats;
}
***************
*** 3594,3600 **** pgstat_write_statsfiles(bool permanent, bool allDbs)
/*
* Set the timestamp of the stats file.
*/
! globalStats.stats_timestamp = GetCurrentTimestamp();
/*
* Write the file header --- currently just a format ID.
--- 3595,3601 ----
/*
* Set the timestamp of the stats file.
*/
! global_stat_timestamp = GetCurrentTimestamp();
/*
* Write the file header --- currently just a format ID.
***************
*** 3604,3612 **** pgstat_write_statsfiles(bool permanent, bool allDbs)
(void) rc; /* we'll check for error with ferror */
/*
! * Write global stats struct
*/
! rc = fwrite(&globalStats, sizeof(globalStats), 1, fpout);
(void) rc; /* we'll check for error with ferror */
/*
--- 3605,3613 ----
(void) rc; /* we'll check for error with ferror */
/*
! * Write bgwriter stats struct
*/
! rc = fwrite(&bgwriterStats, sizeof(bgwriterStats), 1, fpout);
(void) rc; /* we'll check for error with ferror */
/*
***************
*** 3630,3636 **** pgstat_write_statsfiles(bool permanent, bool allDbs)
*/
if (allDbs || pgstat_db_requested(dbentry->databaseid))
{
! dbentry->stats_timestamp = globalStats.stats_timestamp;
pgstat_write_db_statsfile(dbentry, permanent);
}
--- 3631,3637 ----
*/
if (allDbs || pgstat_db_requested(dbentry->databaseid))
{
! dbentry->stats_timestamp = global_stat_timestamp;
pgstat_write_db_statsfile(dbentry, permanent);
}
***************
*** 3881,3898 **** pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep)
HASH_ELEM | HASH_FUNCTION | HASH_CONTEXT);
/*
! * Clear out global and archiver statistics so they start from zero
* in case we can't load an existing statsfile.
*/
! memset(&globalStats, 0, sizeof(globalStats));
memset(&archiverStats, 0, sizeof(archiverStats));
/*
* Set the current timestamp (will be kept only in case we can't load an
* existing statsfile).
*/
! globalStats.stat_reset_timestamp = GetCurrentTimestamp();
! archiverStats.stat_reset_timestamp = globalStats.stat_reset_timestamp;
/*
* Try to open the stats file. If it doesn't exist, the backends simply
--- 3882,3899 ----
HASH_ELEM | HASH_FUNCTION | HASH_CONTEXT);
/*
! * Clear out bgwriter and archiver statistics so they start from zero
* in case we can't load an existing statsfile.
*/
! memset(&bgwriterStats, 0, sizeof(bgwriterStats));
memset(&archiverStats, 0, sizeof(archiverStats));
/*
* Set the current timestamp (will be kept only in case we can't load an
* existing statsfile).
*/
! bgwriterStats.stat_reset_timestamp = GetCurrentTimestamp();
! archiverStats.stat_reset_timestamp = bgwriterStats.stat_reset_timestamp;
/*
* Try to open the stats file. If it doesn't exist, the backends simply
***************
*** 3925,3933 **** pgstat_read_statsfiles(Oid onlydb, bool permanent, bool deep)
}
/*
! * Read global stats struct
*/
! if (fread(&globalStats, 1, sizeof(globalStats), fpin) != sizeof(globalStats))
{
ereport(pgStatRunningInCollector ? LOG : WARNING,
(errmsg("corrupted statistics file \"%s\"", statfile)));
--- 3926,3934 ----
}
/*
! * Read bgwriter stats struct
*/
! if (fread(&bgwriterStats, 1, sizeof(bgwriterStats), fpin) != sizeof(bgwriterStats))
{
ereport(pgStatRunningInCollector ? LOG : WARNING,
(errmsg("corrupted statistics file \"%s\"", statfile)));
***************
*** 4233,4239 **** pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent,
TimestampTz *ts)
{
PgStat_StatDBEntry dbentry;
! PgStat_GlobalStats myGlobalStats;
PgStat_ArchiverStats myArchiverStats;
FILE *fpin;
int32 format_id;
--- 4234,4240 ----
TimestampTz *ts)
{
PgStat_StatDBEntry dbentry;
! PgStat_BgWriterStats myBgWriterStats;
PgStat_ArchiverStats myArchiverStats;
FILE *fpin;
int32 format_id;
***************
*** 4266,4275 **** pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent,
}
/*
! * Read global stats struct
*/
! if (fread(&myGlobalStats, 1, sizeof(myGlobalStats),
! fpin) != sizeof(myGlobalStats))
{
ereport(pgStatRunningInCollector ? LOG : WARNING,
(errmsg("corrupted statistics file \"%s\"", statfile)));
--- 4267,4276 ----
}
/*
! * Read bgwriter stats struct
*/
! if (fread(&myBgWriterStats, 1, sizeof(myBgWriterStats),
! fpin) != sizeof(myBgWriterStats))
{
ereport(pgStatRunningInCollector ? LOG : WARNING,
(errmsg("corrupted statistics file \"%s\"", statfile)));
***************
*** 4290,4296 **** pgstat_read_db_statsfile_timestamp(Oid databaseid, bool permanent,
}
/* By default, we're going to return the timestamp of the global file. */
! *ts = myGlobalStats.stats_timestamp;
/*
* We found an existing collector stats file. Read it and look for a
--- 4291,4297 ----
}
/* By default, we're going to return the timestamp of the global file. */
! *ts = global_stat_timestamp;
/*
* We found an existing collector stats file. Read it and look for a
***************
*** 4812,4820 **** pgstat_recv_resetsharedcounter(PgStat_MsgResetsharedcounter *msg, int len)
{
if (msg->m_resettarget == RESET_BGWRITER)
{
! /* Reset the global background writer statistics for the cluster. */
! memset(&globalStats, 0, sizeof(globalStats));
! globalStats.stat_reset_timestamp = GetCurrentTimestamp();
}
else if (msg->m_resettarget == RESET_ARCHIVER)
{
--- 4813,4821 ----
{
if (msg->m_resettarget == RESET_BGWRITER)
{
! /* Reset the background writer statistics for the cluster. */
! memset(&bgwriterStats, 0, sizeof(bgwriterStats));
! bgwriterStats.stat_reset_timestamp = GetCurrentTimestamp();
}
else if (msg->m_resettarget == RESET_ARCHIVER)
{
***************
*** 4987,5002 **** pgstat_recv_archiver(PgStat_MsgArchiver *msg, int len)
static void
pgstat_recv_bgwriter(PgStat_MsgBgWriter *msg, int len)
{
! globalStats.timed_checkpoints += msg->m_timed_checkpoints;
! globalStats.requested_checkpoints += msg->m_requested_checkpoints;
! globalStats.checkpoint_write_time += msg->m_checkpoint_write_time;
! globalStats.checkpoint_sync_time += msg->m_checkpoint_sync_time;
! globalStats.buf_written_checkpoints += msg->m_buf_written_checkpoints;
! globalStats.buf_written_clean += msg->m_buf_written_clean;
! globalStats.maxwritten_clean += msg->m_maxwritten_clean;
! globalStats.buf_written_backend += msg->m_buf_written_backend;
! globalStats.buf_fsync_backend += msg->m_buf_fsync_backend;
! globalStats.buf_alloc += msg->m_buf_alloc;
}
/* ----------
--- 4988,5003 ----
static void
pgstat_recv_bgwriter(PgStat_MsgBgWriter *msg, int len)
{
! bgwriterStats.timed_checkpoints += msg->m_timed_checkpoints;
! bgwriterStats.requested_checkpoints += msg->m_requested_checkpoints;
! bgwriterStats.checkpoint_write_time += msg->m_checkpoint_write_time;
! bgwriterStats.checkpoint_sync_time += msg->m_checkpoint_sync_time;
! bgwriterStats.buf_written_checkpoints += msg->m_buf_written_checkpoints;
! bgwriterStats.buf_written_clean += msg->m_buf_written_clean;
! bgwriterStats.maxwritten_clean += msg->m_maxwritten_clean;
! bgwriterStats.buf_written_backend += msg->m_buf_written_backend;
! bgwriterStats.buf_fsync_backend += msg->m_buf_fsync_backend;
! bgwriterStats.buf_alloc += msg->m_buf_alloc;
}
/* ----------
*** a/src/backend/utils/adt/pgstatfuncs.c
--- b/src/backend/utils/adt/pgstatfuncs.c
***************
*** 1412,1480 **** pg_stat_get_db_blk_write_time(PG_FUNCTION_ARGS)
Datum
pg_stat_get_bgwriter_timed_checkpoints(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_global()->timed_checkpoints);
}
Datum
pg_stat_get_bgwriter_requested_checkpoints(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_global()->requested_checkpoints);
}
Datum
pg_stat_get_bgwriter_buf_written_checkpoints(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_global()->buf_written_checkpoints);
}
Datum
pg_stat_get_bgwriter_buf_written_clean(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_global()->buf_written_clean);
}
Datum
pg_stat_get_bgwriter_maxwritten_clean(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_global()->maxwritten_clean);
}
Datum
pg_stat_get_checkpoint_write_time(PG_FUNCTION_ARGS)
{
/* time is already in msec, just convert to double for presentation */
! PG_RETURN_FLOAT8((double) pgstat_fetch_global()->checkpoint_write_time);
}
Datum
pg_stat_get_checkpoint_sync_time(PG_FUNCTION_ARGS)
{
/* time is already in msec, just convert to double for presentation */
! PG_RETURN_FLOAT8((double) pgstat_fetch_global()->checkpoint_sync_time);
}
Datum
pg_stat_get_bgwriter_stat_reset_time(PG_FUNCTION_ARGS)
{
! PG_RETURN_TIMESTAMPTZ(pgstat_fetch_global()->stat_reset_timestamp);
}
Datum
pg_stat_get_buf_written_backend(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_global()->buf_written_backend);
}
Datum
pg_stat_get_buf_fsync_backend(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_global()->buf_fsync_backend);
}
Datum
pg_stat_get_buf_alloc(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_global()->buf_alloc);
}
Datum
--- 1412,1480 ----
Datum
pg_stat_get_bgwriter_timed_checkpoints(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_stat_bgwriter()->timed_checkpoints);
}
Datum
pg_stat_get_bgwriter_requested_checkpoints(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_stat_bgwriter()->requested_checkpoints);
}
Datum
pg_stat_get_bgwriter_buf_written_checkpoints(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_stat_bgwriter()->buf_written_checkpoints);
}
Datum
pg_stat_get_bgwriter_buf_written_clean(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_stat_bgwriter()->buf_written_clean);
}
Datum
pg_stat_get_bgwriter_maxwritten_clean(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_stat_bgwriter()->maxwritten_clean);
}
Datum
pg_stat_get_checkpoint_write_time(PG_FUNCTION_ARGS)
{
/* time is already in msec, just convert to double for presentation */
! PG_RETURN_FLOAT8((double) pgstat_fetch_stat_bgwriter()->checkpoint_write_time);
}
Datum
pg_stat_get_checkpoint_sync_time(PG_FUNCTION_ARGS)
{
/* time is already in msec, just convert to double for presentation */
! PG_RETURN_FLOAT8((double) pgstat_fetch_stat_bgwriter()->checkpoint_sync_time);
}
Datum
pg_stat_get_bgwriter_stat_reset_time(PG_FUNCTION_ARGS)
{
! PG_RETURN_TIMESTAMPTZ(pgstat_fetch_stat_bgwriter()->stat_reset_timestamp);
}
Datum
pg_stat_get_buf_written_backend(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_stat_bgwriter()->buf_written_backend);
}
Datum
pg_stat_get_buf_fsync_backend(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_stat_bgwriter()->buf_fsync_backend);
}
Datum
pg_stat_get_buf_alloc(PG_FUNCTION_ARGS)
{
! PG_RETURN_INT64(pgstat_fetch_stat_bgwriter()->buf_alloc);
}
Datum
*** a/src/include/pgstat.h
--- b/src/include/pgstat.h
***************
*** 642,652 **** typedef struct PgStat_ArchiverStats
} PgStat_ArchiverStats;
/*
! * Global statistics kept in the stats collector
*/
! typedef struct PgStat_GlobalStats
{
- TimestampTz stats_timestamp; /* time of stats file update */
PgStat_Counter timed_checkpoints;
PgStat_Counter requested_checkpoints;
PgStat_Counter checkpoint_write_time; /* times in milliseconds */
--- 642,651 ----
} PgStat_ArchiverStats;
/*
! * BgWriter statistics kept in the stats collector
*/
! typedef struct PgStat_BgWriterStats
{
PgStat_Counter timed_checkpoints;
PgStat_Counter requested_checkpoints;
PgStat_Counter checkpoint_write_time; /* times in milliseconds */
***************
*** 658,664 **** typedef struct PgStat_GlobalStats
PgStat_Counter buf_fsync_backend;
PgStat_Counter buf_alloc;
TimestampTz stat_reset_timestamp;
! } PgStat_GlobalStats;
/* ----------
--- 657,663 ----
PgStat_Counter buf_fsync_backend;
PgStat_Counter buf_alloc;
TimestampTz stat_reset_timestamp;
! } PgStat_BgWriterStats;
/* ----------
***************
*** 907,912 **** extern PgBackendStatus *pgstat_fetch_stat_beentry(int beid);
extern PgStat_StatFuncEntry *pgstat_fetch_stat_funcentry(Oid funcid);
extern int pgstat_fetch_stat_numbackends(void);
extern PgStat_ArchiverStats *pgstat_fetch_stat_archiver(void);
! extern PgStat_GlobalStats *pgstat_fetch_global(void);
#endif /* PGSTAT_H */
--- 906,911 ----
extern PgStat_StatFuncEntry *pgstat_fetch_stat_funcentry(Oid funcid);
extern int pgstat_fetch_stat_numbackends(void);
extern PgStat_ArchiverStats *pgstat_fetch_stat_archiver(void);
! extern PgStat_BgWriterStats *pgstat_fetch_stat_bgwriter(void);
#endif /* PGSTAT_H */
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers