Make vacuum buffer counters 64 bits wide
authorAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 5 Feb 2020 19:59:29 +0000 (16:59 -0300)
committerAlvaro Herrera <alvherre@alvh.no-ip.org>
Wed, 5 Feb 2020 19:59:29 +0000 (16:59 -0300)
Using 32 bit counters means they can now realistically wrap around when
vacuuming extremely large tables.  Because they're signed integers,
stats printed by vacuum look very odd when they do.

We'd love to backpatch this, but refrain because the variables are
exported and could cause third-party code to break.

Reviewed-by: Julien Rouhaud, Tom Lane, Michael Paquier
Discussion: https://postgr.es/m/20200131205926.GA16367@alvherre.pgsql

src/backend/access/heap/vacuumlazy.c
src/backend/utils/init/globals.c
src/include/miscadmin.h

index 8ce501151e913a27ab4be89c4ea1a2d68a714e5b..a23cdefbd0d3fc515174144cc5c3430db5fd7921 100644 (file)
@@ -614,10 +614,10 @@ heap_vacuum_rel(Relation onerel, VacuumParams *params,
                             vacrelstats->new_dead_tuples,
                             OldestXmin);
            appendStringInfo(&buf,
-                            _("buffer usage: %d hits, %d misses, %d dirtied\n"),
-                            VacuumPageHit,
-                            VacuumPageMiss,
-                            VacuumPageDirty);
+                            _("buffer usage: %lld hits, %lld misses, %lld dirtied\n"),
+                            (long long) VacuumPageHit,
+                            (long long) VacuumPageMiss,
+                            (long long) VacuumPageDirty);
            appendStringInfo(&buf, _("avg read rate: %.3f MB/s, avg write rate: %.3f MB/s\n"),
                             read_rate, write_rate);
            appendStringInfo(&buf, _("system usage: %s"), pg_rusage_show(&ru0));
index b1f6291b99ebc06503c502b3830575684f59bd3b..eb19644419854d075516cbd6d045fed27e24593e 100644 (file)
@@ -140,9 +140,9 @@ int         VacuumCostPageDirty = 20;
 int            VacuumCostLimit = 200;
 double     VacuumCostDelay = 0;
 
-int            VacuumPageHit = 0;
-int            VacuumPageMiss = 0;
-int            VacuumPageDirty = 0;
+int64      VacuumPageHit = 0;
+int64      VacuumPageMiss = 0;
+int64      VacuumPageDirty = 0;
 
 int            VacuumCostBalance = 0;  /* working state for vacuum */
 bool       VacuumCostActive = false;
index 62d64aa0a14e00e00783392f9c699cb236b4365c..f985453ec32de6e63f70b314403b707f04ef7f2c 100644 (file)
@@ -252,9 +252,9 @@ extern int  VacuumCostPageDirty;
 extern int VacuumCostLimit;
 extern double VacuumCostDelay;
 
-extern int VacuumPageHit;
-extern int VacuumPageMiss;
-extern int VacuumPageDirty;
+extern int64 VacuumPageHit;
+extern int64 VacuumPageMiss;
+extern int64 VacuumPageDirty;
 
 extern int VacuumCostBalance;
 extern bool VacuumCostActive;