--- backend/commands/vacuumlazy.c 2011-01-27 20:21:31.000000000 -0600 +++ ../../postgresql-9.0.3/src/backend/commands/vacuumlazy.c 2011-03-03 08:55:08.000000000 -0600 @@ -349,6 +349,7 @@ lazy_scan_heap(Relation onerel, LVRelSta Size freespace; bool all_visible_according_to_vm = false; bool all_visible; + char *reason; /* * Skip pages that don't require vacuuming according to the visibility @@ -500,6 +501,7 @@ lazy_scan_heap(Relation onerel, LVRelSta * requiring freezing. */ all_visible = true; + reason = ""; nfrozen = 0; hastup = false; prev_dead_count = vacrelstats->num_dead_tuples; @@ -538,6 +540,7 @@ lazy_scan_heap(Relation onerel, LVRelSta { lazy_record_dead_tuple(vacrelstats, &(tuple.t_self)); all_visible = false; + reason = "dead item"; continue; } @@ -573,6 +576,7 @@ lazy_scan_heap(Relation onerel, LVRelSta else tupgone = true; /* we can delete the tuple */ all_visible = false; + reason = "dead heaptuple"; break; case HEAPTUPLE_LIVE: /* Tuple is good --- but let's do some validity checks */ @@ -597,6 +601,7 @@ lazy_scan_heap(Relation onerel, LVRelSta if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) { all_visible = false; + reason = "!HEAP_XMIN_COMMITTED"; break; } @@ -608,6 +613,7 @@ lazy_scan_heap(Relation onerel, LVRelSta if (!TransactionIdPrecedes(xmin, OldestXmin)) { all_visible = false; + reason = "OldestXmin"; break; } } @@ -620,14 +626,17 @@ lazy_scan_heap(Relation onerel, LVRelSta */ nkeep += 1; all_visible = false; + reason = "RecentlyDead"; break; case HEAPTUPLE_INSERT_IN_PROGRESS: /* This is an expected case during concurrent vacuum */ all_visible = false; + reason = "InsertInProgress"; break; case HEAPTUPLE_DELETE_IN_PROGRESS: /* This is an expected case during concurrent vacuum */ all_visible = false; + reason = "DeleteInProgress"; break; default: elog(ERROR, "unexpected HeapTupleSatisfiesVacuum result"); @@ -705,8 +714,8 @@ lazy_scan_heap(Relation onerel, LVRelSta } else if (PageIsAllVisible(page) && !all_visible) { - elog(WARNING, "PD_ALL_VISIBLE flag was incorrectly set in relation \"%s\" page %u", - relname, blkno); + elog(WARNING, "PD_ALL_VISIBLE flag was incorrectly set in relation \"%s\" page %u via %s", + relname, blkno, reason); PageClearAllVisible(page); SetBufferCommitInfoNeedsSave(buf);