Re: Trigger more frequent autovacuums of heavy insert tables - Mailing list pgsql-hackers

From Greg Sabino Mullane
Subject Re: Trigger more frequent autovacuums of heavy insert tables
Date
Msg-id CAKAnmm+c3FN7WmHUjwmm6odQ5-09H4wumCUTSApTJNCOO-k72A@mail.gmail.com
Whole thread Raw
List pgsql-hackers
I really appreciate all the work to make vacuum better. Anything that helps our problem of autovacuum not scaling well for large tables is a win.

I'm not overly familiar with this part of the code base, but here are some questions/ideas:

+       /*
+        * Every block marked all-frozen in the VM must also be marked
+        * all-visible.
+        */
+       if (new_rel_allfrozen > new_rel_allvisible)
+               new_rel_allfrozen = new_rel_allvisible;
+

Maybe tweak either the comment, or the code, as I read that comment as meaning:

if (new_rel_allfrozen > new_rel_allvisible)
  new_ral_allvisible = new_rel_allfrozen;

+                       /*
+                        * If we are modifying relallvisible manually, it is not clear
+                        * what relallfrozen value would make sense. Therefore, set it to
+                        * -1, or unknown. It will be updated the next time these fields
+                        *  are updated.
+                        */
+                       replaces[ncols] = Anum_pg_class_relallfrozen;
+                       values[ncols] = Int32GetDatum(-1);

Do we need some extra checks later on when we are actually using this to prevent negative numbers in the calculations? It's only going to make pcnt_unfrozen something like 1.0001 but still might want to skip that.


In autovacuum.c, seems we could simplify some of the logic there to this?:

if (relpages > 0 && reltuples > 0) {

  relallfrozen = classForm->relallfrozen;
  relallvisible = classForm->relallvisible;

  if (relallvisible > relpages)
    relallvisible = relpages;

  if (relallfrozen > relallvisible)
    relallfrozen = relallvisible;

  pcnt_unfrozen = 1 - ((float4) relallfrozen / relpages);

}
vacinsthresh = (float4) vac_ins_base_thresh + vac_ins_scale_factor * reltuples * pcnt_unfrozen;

Again, I'm not clear under what circumstances will relallvisible > relpages?

Cheers,
Greg


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Using Expanded Objects other than Arrays from plpgsql
Next
From: Nikolay Samokhvalov
Date:
Subject: vacuumdb --analyze-only (e.g., after a major upgrade) vs. partitioned tables: pg_statistic missing stats for the partitioned table itself