aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndres Freund <andres@anarazel.de>2020-08-16 12:57:01 -0700
committerAndres Freund <andres@anarazel.de>2020-08-16 12:57:01 -0700
commit49967da65aec970fcda123acc681f1df5d70bfc6 (patch)
tree6cf20d5c6e151998fd7bbd3c392da6c1ea795ae0 /src
parent676a9c3cc4b5f1d262c29de318868948513f0fa0 (diff)
downloadpostgresql-49967da65aec970fcda123acc681f1df5d70bfc6.tar.gz
postgresql-49967da65aec970fcda123acc681f1df5d70bfc6.zip
Make vacuum a bit more verbose to debug BF failure.
This is temporary. While possibly some more error checking / debugging in this path would be a good thing, it'll not look exactly like this. Discussion: https://postgr.es/m/20200816181604.l54m6kss5ntd6xow@alap3.anarazel.de
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/heap/heapam.c11
-rw-r--r--src/backend/access/heap/vacuumlazy.c7
2 files changed, 17 insertions, 1 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 9b5f417eac4..8eb276e4644 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -6048,7 +6048,16 @@ FreezeMultiXactId(MultiXactId multi, uint16 t_infomask,
TransactionIdIsInProgress(members[i].xid))
{
/* running locker cannot possibly be older than the cutoff */
- Assert(!TransactionIdPrecedes(members[i].xid, cutoff_xid));
+ if (TransactionIdPrecedes(members[i].xid, cutoff_xid))
+ {
+ /* temporary on-bf debugging */
+ elog(PANIC, "too old alive locker: multi: %u, member xid: %u, memb-current: %d, memb-progress: %d, cutoff: %u, cutoff-multi: %u, relfrozenxid: %u, relminmxid: %u",
+ multi, members[i].xid,
+ TransactionIdIsCurrentTransactionId(members[i].xid),
+ TransactionIdIsInProgress(members[i].xid),
+ cutoff_xid, cutoff_multi,
+ relfrozenxid, relminmxid);
+ }
newmembers[nnewmembers++] = members[i];
has_lockers = true;
}
diff --git a/src/backend/access/heap/vacuumlazy.c b/src/backend/access/heap/vacuumlazy.c
index 44e2224dd55..03c8e1ff7ea 100644
--- a/src/backend/access/heap/vacuumlazy.c
+++ b/src/backend/access/heap/vacuumlazy.c
@@ -1350,7 +1350,14 @@ lazy_scan_heap(Relation onerel, VacuumParams *params, LVRelStats *vacrelstats,
if (HeapTupleIsHotUpdated(&tuple) ||
HeapTupleIsHeapOnly(&tuple) ||
params->index_cleanup == VACOPT_TERNARY_DISABLED)
+ {
+ /* temporary on-bf debugging */
+ elog(LOG, "treating dead HOT tuple (updated %d, heap only: %d, index cleanup: %d) as alive",
+ HeapTupleIsHotUpdated(&tuple), HeapTupleIsHeapOnly(&tuple),
+ params->index_cleanup == VACOPT_TERNARY_DISABLED);
+
nkeep += 1;
+ }
else
tupgone = true; /* we can delete the tuple */
all_visible = false;