Re: Potential G2-item cycles under serializable isolation
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Kyle Kingsbury <aphyr@jepsen.io>
Cc: Thomas Munro <thomas.munro@gmail.com>, Andres Freund <andres@anarazel.de>, Kevin Grittner <kgrittn@gmail.com>, Jeff Davis <pgsql@j-davis.com>, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>
Date: 2020-06-15T17:15:59Z
Lists: pgsql-bugs
On Mon, Jun 15, 2020 at 5:42 AM Kyle Kingsbury <aphyr@jepsen.io> wrote: > On 6/14/20 9:30 PM, Thomas Munro wrote: > > By my reading of their manual, MySQL (assuming InnoDB) uses SI for > > REPEATABLE READ just like us, and it's also their default level. > > > > https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html > > That can't be right. MySQL repeatable read allows lost update, write skew, and > at least some kinds of read skew: it's got to be weaker than SI and also weaker > than RR. I think it's actually Monotonic Atomic View plus some read-only > constraints? At first glance it seemed to me that MySQL's repeatable read must be more or less the same as Postgres' repeatable read; there is only one snapshot in each case. But it's very different in reality, since updates and deletes don't use the transaction snapshot. Worst of all, you can update rows that were not visible to the transaction snapshot, thus rendering them visible (see the "Note" box in the documentation for an example of this). InnoDB won't throw a serialization error at any isolation level. I think that means that InnoDB's RR mode could "render" *some* of the rows concurrently inserted by another transaction (those that our xact happened to update) as visible, while leaving other rows inserted by that same other transaction invisible. That kind of behavior seems really hazardous to me. It almost seems safer to use RC mode, since using a new snapshot for each new statement is "more honest". Presumably RC mode doesn't exhibit the inconsistency I described -- at least all of the rows that were concurrently inserted by that other xact become visible together. -- Peter Geoghegan
Commits
-
Doc: Add references for SI and SSI.
- 4c897197d793 9.5.23 landed
- 7295ac9c6c71 9.6.19 landed
- e2aca0d02d97 10.14 landed
- 648e56d3984d 11.9 landed
- eb1286413c0a 12.4 landed
- 4701efa9f741 13.0 landed
- 1575fbf1ac3c 14.0 landed
-
Improve comments for [Heap]CheckForSerializableConflictOut().
- 44eff2841059 13.0 landed
- 7aa4fb592530 14.0 landed
-
Avoid update conflict out serialization anomalies.
- 5940ffb22131 14.0 landed
- 6df7105e5d50 13.0 landed
- e620a38c23b9 12.4 landed
- dd616f2ec1c5 11.9 landed
- 19a6e1bc3083 10.14 landed
- e81dc2b7e2c4 9.6.19 landed
- c05f6b354ffe 9.5.23 landed
-
Implement genuine serializable isolation level.
- dafaa3efb75c 9.1.0 cited