There isn't really any need for the second pass in lazy vacuum if the table
has no indexes. The patch seems almost too easy but of course nothing having
to do with vacuum is as easy as it appears. Perhaps there are some gotchas I
haven't thought of?



Index: src/backend/commands/vacuumlazy.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v
retrieving revision 1.76
diff -c -r1.76 vacuumlazy.c
*** src/backend/commands/vacuumlazy.c   31 Jul 2006 20:09:00 -0000      1.76
--- src/backend/commands/vacuumlazy.c   27 Aug 2006 14:06:10 -0000
***************
*** 450,455 ****
--- 450,464 ----
                {
                        lazy_record_free_space(vacrelstats, blkno,
                                                                   
PageGetFreeSpace(page));
+               } else if (!nindexes) {
+                       /* If there are no indexes we can vacuum the page right 
now instead
+                        * of doing a second scan */
+ 
+                       LockBuffer(buf, BUFFER_LOCK_UNLOCK);
+                       LockBufferForCleanup(buf);
+                       lazy_vacuum_page(onerel, blkno, buf, 0, vacrelstats);
+                       lazy_record_free_space(vacrelstats, blkno, 
PageGetFreeSpace(BufferGetPage(buf)));
+                       vacrelstats->num_dead_tuples = 0;
                }
  
                /* Remember the location of the last page with nonremovable 
tuples */


-- 
  Gregory Stark
  EnterpriseDB          http://www.enterprisedb.com

---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faq

Reply via email to