Clamp last_anl_tuples to n_live_tuples, in case we vacuum a table without
authorAlvaro Herrera <[email protected]>
Tue, 27 Jun 2006 03:45:28 +0000 (03:45 +0000)
committerAlvaro Herrera <[email protected]>
Tue, 27 Jun 2006 03:45:28 +0000 (03:45 +0000)
analyzing, so that future analyze threshold calculations don't get confused.
Also, make sure we correctly track the decrease of live tuples cause by
deletes.

Per report from Dylan Hansen, patches by Tom Lane and me.

src/backend/postmaster/pgstat.c

index 8fc6dd25734653fabc1d50b450ea64f3ac6115f1..d8a00208a2de7dbb0c56424f9becf6c4b2fe919b 100644 (file)
@@ -2919,6 +2919,12 @@ pgstat_recv_vacuum(PgStat_MsgVacuum *msg, int len)
        tabentry->n_dead_tuples = 0;
        if (msg->m_analyze)
                tabentry->last_anl_tuples = msg->m_tuples;
+       else
+       {
+               /* last_anl_tuples must never exceed n_live_tuples */
+               tabentry->last_anl_tuplse = Min(tabentry->last_anl_tuples,
+                                                                               msg->m_tuples);
+       }
 }
 
 /* ----------
@@ -3055,7 +3061,8 @@ pgstat_recv_tabstat(PgStat_MsgTabstat *msg, int len)
                        tabentry->tuples_updated += tabmsg[i].t_tuples_updated;
                        tabentry->tuples_deleted += tabmsg[i].t_tuples_deleted;
 
-                       tabentry->n_live_tuples += tabmsg[i].t_tuples_inserted;
+                       tabentry->n_live_tuples += tabmsg[i].t_tuples_inserted -
+                               tabmsg[i].t_tuples_deleted;
                        tabentry->n_dead_tuples += tabmsg[i].t_tuples_updated +
                                tabmsg[i].t_tuples_deleted;