Call pgstat_drop_database during DROP DATABASE, so that any stats file

entries for the victim database go away sooner rather than later.  We already
did the equivalent thing at the per-relation level, not sure why it's not
been done for whole databases.  With this change, pgstat_vacuum_tabstat
should usually not find anything to do; though we still need it as a backstop
in case DROPDB or TABPURGE messages get lost under load.
This commit is contained in:
Tom Lane 2007-02-09 16:12:19 +00:00
parent c138b966d4
commit f44271176e
3 changed files with 11 additions and 5 deletions

View File

@ -13,7 +13,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.191 2007/02/01 19:10:26 momjian Exp $ * $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.192 2007/02/09 16:12:18 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -37,6 +37,7 @@
#include "commands/tablespace.h" #include "commands/tablespace.h"
#include "mb/pg_wchar.h" #include "mb/pg_wchar.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "pgstat.h"
#include "postmaster/bgwriter.h" #include "postmaster/bgwriter.h"
#include "storage/freespace.h" #include "storage/freespace.h"
#include "storage/procarray.h" #include "storage/procarray.h"
@ -644,6 +645,11 @@ dropdb(const char *dbname, bool missing_ok)
*/ */
FreeSpaceMapForgetDatabase(db_id); FreeSpaceMapForgetDatabase(db_id);
/*
* Tell the stats collector to forget it immediately, too.
*/
pgstat_drop_database(db_id);
/* /*
* Tell bgwriter to forget any pending fsync requests for files in the * Tell bgwriter to forget any pending fsync requests for files in the
* database; else it'll fail at next checkpoint. * database; else it'll fail at next checkpoint.

View File

@ -13,7 +13,7 @@
* *
* Copyright (c) 2001-2007, PostgreSQL Global Development Group * Copyright (c) 2001-2007, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.145 2007/02/07 23:11:29 tgl Exp $ * $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.146 2007/02/09 16:12:18 tgl Exp $
* ---------- * ----------
*/ */
#include "postgres.h" #include "postgres.h"
@ -153,7 +153,6 @@ static void force_statwrite(SIGNAL_ARGS);
static void pgstat_beshutdown_hook(int code, Datum arg); static void pgstat_beshutdown_hook(int code, Datum arg);
static PgStat_StatDBEntry *pgstat_get_db_entry(Oid databaseid, bool create); static PgStat_StatDBEntry *pgstat_get_db_entry(Oid databaseid, bool create);
static void pgstat_drop_database(Oid databaseid);
static void pgstat_write_statsfile(void); static void pgstat_write_statsfile(void);
static HTAB *pgstat_read_statsfile(Oid onlydb); static HTAB *pgstat_read_statsfile(Oid onlydb);
static void backend_read_statsfile(void); static void backend_read_statsfile(void);
@ -820,7 +819,7 @@ pgstat_collect_oids(Oid catalogid)
* via future invocations of pgstat_vacuum_tabstat().) * via future invocations of pgstat_vacuum_tabstat().)
* ---------- * ----------
*/ */
static void void
pgstat_drop_database(Oid databaseid) pgstat_drop_database(Oid databaseid)
{ {
PgStat_MsgDropdb msg; PgStat_MsgDropdb msg;

View File

@ -5,7 +5,7 @@
* *
* Copyright (c) 2001-2007, PostgreSQL Global Development Group * Copyright (c) 2001-2007, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/include/pgstat.h,v 1.53 2007/02/07 23:11:30 tgl Exp $ * $PostgreSQL: pgsql/src/include/pgstat.h,v 1.54 2007/02/09 16:12:19 tgl Exp $
* ---------- * ----------
*/ */
#ifndef PGSTAT_H #ifndef PGSTAT_H
@ -378,6 +378,7 @@ extern void pgstat_ping(void);
extern void pgstat_report_tabstat(void); extern void pgstat_report_tabstat(void);
extern void pgstat_vacuum_tabstat(void); extern void pgstat_vacuum_tabstat(void);
extern void pgstat_drop_database(Oid databaseid);
extern void pgstat_drop_relation(Oid relid); extern void pgstat_drop_relation(Oid relid);
extern void pgstat_clear_snapshot(void); extern void pgstat_clear_snapshot(void);