Re: new heapcheck contrib module
Andres Freund <andres@anarazel.de>
Hi, On 2020-04-20 15:59:49 -0400, Robert Haas wrote: > On Mon, Apr 20, 2020 at 3:42 PM Andres Freund <andres@anarazel.de> wrote: > > I don't think random interspersed uses of CLogTruncationLock are a good > > idea. If you move to only checking visibility after tuple fits into > > [relfrozenxid, nextXid), then you don't need to take any locks here, as > > long as a lock against vacuum is taken (which I think this should do > > anyway). > > I think it would be *really* good to avoid ShareUpdateExclusiveLock > here. Running with only AccessShareLock would be a big advantage. I > agree that any use of CLogTruncationLock should not be "random", but I > don't see why the same method we use to make txid_status() safe to > expose to SQL shouldn't also be used here. A few billion CLogTruncationLock acquisitions in short order will likely have at least as big an impact as ShareUpdateExclusiveLock held for the duration of the check. That's not really a relevant concern or txid_status(). Per-tuple lock acquisitions aren't great. I think it might be doable to not need either. E.g. we could set the checking backend's xmin to relfrozenxid, and set somethign like PROC_IN_VACUUM. That should, I think, prevent clog from being truncated in a problematic way (clog truncations look at PROC_IN_VACUUM backends), while not blocking vacuum. The similar concern for ReadNewTransactionId() can probably more easily be addressed, by only calling ReadNewTransactionId() when encountering an xid that's newer than the last value read. I think it'd be good to set PROC_IN_VACUUM (or maybe a separate version of it) while checking anyway. Reading the full relation can take quite a while, and we shouldn't prevent hot pruning while doing so. There's some things we'd need to figure out to be able to use PROC_IN_VACUUM, as that's really only safe in some circumstances. Possibly it'd be easiest to address that if we'd make the check a procedure... Greetings, Andres Freund
Commits
-
Add pg_amcheck, a CLI for contrib/amcheck.
- 9706092839db 14.0 landed
-
Refactor and generalize the ParallelSlot machinery.
- f71519e545a3 14.0 landed
-
Generalize parallel slot result handling.
- 418611c84d00 14.0 landed
-
Move some code from src/bin/scripts to src/fe_utils to permit reuse.
- e955bd4b6c2b 14.0 landed
-
Factor pattern-construction logic out of processSQLNamePattern.
- 2c8726c4b0a4 14.0 landed
-
Doc: clean up verify_heapam() documentation.
- 4c49d8fc15ee 14.0 landed
-
Fix more portability issues in new amcheck code.
- 321633e17b07 14.0 landed
-
Fix portability issues in new amcheck test.
- 860593ec3bd1 14.0 landed
-
Try to avoid a compiler warning about using fxid uninitialized.
- 8bb0c9770e80 14.0 landed
-
Extend amcheck to check heap pages.
- 866e24d47db1 14.0 landed
-
Adjust walsender usage of xlogreader, simplify APIs
- 850196b610d2 13.0 cited
-
Improve checking of child pages in contrib/amcheck.
- d114cc538715 13.0 cited
-
Sanitize line pointers within contrib/amcheck.
- a9ce839a3137 12.0 cited
-
Fix possible sorting error when aborting use of abbreviated keys.
- 008c4135ccf6 10.0 cited