]> granicus.if.org Git - postgresql/commitdiff
Clamp last_anl_tuples to n_live_tuples, in case we vacuum a table without
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Tue, 27 Jun 2006 03:45:28 +0000 (03:45 +0000)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
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 cd3c4b28cbf8e644f878d7d61074958670b710a4..29087c1538592b385e391e04494acf54b1baf11f 100644 (file)
@@ -13,7 +13,7 @@
  *
  *     Copyright (c) 2001-2005, PostgreSQL Global Development Group
  *
- *     $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.111.2.3 2006/05/19 15:15:38 alvherre Exp $
+ *     $PostgreSQL: pgsql/src/backend/postmaster/pgstat.c,v 1.111.2.4 2006/06/27 03:45:28 alvherre Exp $
  * ----------
  */
 #include "postgres.h"
@@ -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;