I wonder if we really need to make another pass over the entire visibility map to count the number of all-visible pages at the end of the vacuum. The code that I'm looking at is in src/backend/commands/vacuumlazy.c:
247 new_rel_allvisible = visibilitymap_count(onerel); 248 if (new_rel_allvisible > new_rel_pages) 249 new_rel_allvisible = new_rel_pages; We would have just scanned every bit of the visibility map and can remember information about the number of all-visible pages in vacrelstats, just like many other statistical information that we track and update the end of the vacuum. Sure, there might be some more updates to the VM, especially a few bits may get cleared while we are vacuuming the table, but that can happen even while we are recounting at the end. AFAICS we can deal with that much staleness of the data. If we agree that this is worth improving, I can write a patch to do so. Thanks, Pavan -- Pavan Deolasee http://www.linkedin.com/in/pavandeolasee