Re: shared-memory based stats collector - Mailing list pgsql-hackers
From | Kyotaro Horiguchi |
---|---|
Subject | Re: shared-memory based stats collector |
Date | |
Msg-id | 20210322.120239.1779693407179040162.horikyota.ntt@gmail.com Whole thread Raw |
In response to | Re: shared-memory based stats collector (Kyotaro Horiguchi <horikyota.ntt@gmail.com>) |
List | pgsql-hackers |
At Mon, 22 Mar 2021 09:55:59 +0900 (JST), Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote in > At Thu, 18 Mar 2021 01:47:20 -0700, Andres Freund <andres@anarazel.de> wrote in > > Hi, > > > > On 2021-03-18 16:56:02 +0900, Kyotaro Horiguchi wrote: > > > At Tue, 16 Mar 2021 10:27:55 +0900 (JST), Kyotaro Horiguchi <horikyota.ntt@gmail.com> wrote in > > > Rebased and fixed two bugs. Not addressed received comments in this > > > version. > > > > Since I am heavily editing the code, could you submit "functional" > > changes (as opposed to fixing rebase issues) as incremental patches? > > Oh.. please wait for.. a moment, maybe. This is that. regards. -- Kyotaro Horiguchi NTT Open Source Software Center diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index c09fa026b9..3f546afe6a 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -1175,13 +1175,6 @@ pgstat_report_stat(bool force) if (area == NULL) return 0; - /* - * We need a database entry if the following stats exists. - */ - if (pgStatXactCommit > 0 || pgStatXactRollback > 0 || - pgStatBlockReadTime > 0 || pgStatBlockWriteTime > 0) - get_local_dbstat_entry(MyDatabaseId); - /* Don't expend a clock check if nothing to do */ if (pgStatLocalHash == NULL && have_slrustats && !walstats_pending()) return 0; @@ -1221,8 +1214,6 @@ pgstat_report_stat(bool force) { int remains = 0; pgstat_localhash_iterator i; - List *dbentlist = NIL; - ListCell *lc; PgStatLocalHashEntry *lent; /* Step 1: flush out other than database stats */ @@ -1234,13 +1225,11 @@ pgstat_report_stat(bool force) switch (lent->key.type) { case PGSTAT_TYPE_DB: - /* * flush_tabstat applies some of stats numbers of flushed - * entries into local database stats. Just remember the - * database entries for now then flush-out them later. + * entries into local and shared database stats. Treat them + * separately later. */ - dbentlist = lappend(dbentlist, lent); break; case PGSTAT_TYPE_TABLE: if (flush_tabstat(lent, nowait)) @@ -1268,9 +1257,11 @@ pgstat_report_stat(bool force) } /* Step 2: flush out database stats */ - foreach(lc, dbentlist) + pgstat_localhash_start_iterate(pgStatLocalHash, &i); + while ((lent = pgstat_localhash_iterate(pgStatLocalHash, &i)) != NULL) { - PgStatLocalHashEntry *lent = (PgStatLocalHashEntry *) lfirst(lc); + /* no other types of entry must be found here */ + Assert(lent->key.type == PGSTAT_TYPE_DB); if (flush_dbstat(lent, nowait)) { @@ -1281,8 +1272,6 @@ pgstat_report_stat(bool force) pgstat_localhash_delete(pgStatLocalHash, lent->key); } } - list_free(dbentlist); - dbentlist = NULL; if (remains <= 0) { @@ -1507,7 +1496,7 @@ flush_dbstat(PgStatLocalHashEntry *ent, bool nowait) Assert(ent->key.type == PGSTAT_TYPE_DB); - localent = (PgStat_StatDBEntry *) &ent->body; + localent = (PgStat_StatDBEntry *) ent->body; /* find shared database stats entry corresponding to the local entry */ sharedent = (PgStat_StatDBEntry *) @@ -3215,11 +3204,8 @@ pgstat_fetch_stat_dbentry(Oid dbid) /* should be called from backends */ Assert(IsUnderPostmaster); - /* the simple cache doesn't work properly for InvalidOid */ - Assert(dbid != InvalidOid); - /* Return cached result if it is valid. */ - if (cached_dbent_key.databaseid == dbid) + if (dbid != 0 && cached_dbent_key.databaseid == dbid) return &cached_dbent; shent = (PgStat_StatDBEntry *)
pgsql-hackers by date: