Skip to content

The same schedule, every engine, every level

Committed, aborted with which error, or completed with an anomaly. The disagreement between engines is the lesson.

Documents: Write skew — Two doctors are on call and at least one must remain. Each opens the roster, sees that the other is on call, and takes themselves off. Both commit.

Updated: The on-call roster empties

The on-call roster emptiesOne row per engine pack, one column per isolation level.
EngineRURCRRSISER
PostgreSQL 16postgres-16anomalywrite-skewaliasRCanomalywrite-skewanomalywrite-skewno such levelaborted T240001
MySQL InnoDB 8.4mysql-8-innodbanomalywrite-skewanomalywrite-skewanomalywrite-skewno such levelaborted T21213
Microsoft SQL Server 2022sqlserver-2022anomalywrite-skewanomalywrite-skewno such levelanomalywrite-skewno such level
Microsoft SQL Server 2022sqlserver-2022-rcsianomalywrite-skewanomalywrite-skewno such levelanomalywrite-skewno such level
Oracle Database 23ai Freeoracle-23aino such levelanomalywrite-skewno such levelno such levelanomalywrite-skew
Legendcleananomalyabortedno such level

Which level names cannot be told apart

Every level of every engine here, run against all 11 schedules in the library and grouped by what the application saw: the value each statement returned, where it waited, which transactions committed, and the table left behind. Only the error codes are ignored — 40001 and ORA-08177 are the same event in two dialects.

This is evidence over 11 schedules, not a proof of equivalence. Two levels in the same group agreed on every one of them; a twelfth schedule could still tell them apart. Read each group as “nothing here distinguishes these”, never as “these are the same level”.

    • PostgreSQL 16 READ UNCOMMITTEDaliasREAD COMMITTEDpostgres-16
    • PostgreSQL 16 READ COMMITTEDpostgres-16

    Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 3

    • Microsoft SQL Server 2022 READ COMMITTEDsqlserver-2022-rcsi
    • Oracle Database 23ai Free READ COMMITTEDoracle-23ai

    Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 2

    • Microsoft SQL Server 2022 READ UNCOMMITTEDsqlserver-2022
    • Microsoft SQL Server 2022 READ UNCOMMITTEDsqlserver-2022-rcsi

    Permits somewhere in the library: Dirty read, Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 2

    • Microsoft SQL Server 2022 REPEATABLE READsqlserver-2022
    • Microsoft SQL Server 2022 REPEATABLE READsqlserver-2022-rcsi

    Permits somewhere in the library: Phantom read, Write skewaborts a transaction in 2

    • Microsoft SQL Server 2022 SERIALIZABLEsqlserver-2022
    • Microsoft SQL Server 2022 SERIALIZABLEsqlserver-2022-rcsi

    Permits somewhere in the library: no anomaly in any scheduleaborts a transaction in 2

    • Microsoft SQL Server 2022 SNAPSHOTsqlserver-2022
    • Microsoft SQL Server 2022 SNAPSHOTsqlserver-2022-rcsi

    Permits somewhere in the library: Write skewaborts a transaction in 5

    • MySQL InnoDB 8.4 READ COMMITTEDmysql-8-innodb

    Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 3

    • MySQL InnoDB 8.4 READ UNCOMMITTEDmysql-8-innodb

    Permits somewhere in the library: Dirty read, Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 3

    • MySQL InnoDB 8.4 REPEATABLE READmysql-8-innodb

    Permits somewhere in the library: Lost update, Write skewaborts a transaction in 3

    • MySQL InnoDB 8.4 SERIALIZABLEmysql-8-innodb

    Permits somewhere in the library: no anomaly in any scheduleaborts a transaction in 6

    • Oracle Database 23ai Free SERIALIZABLEoracle-23ai

    Permits somewhere in the library: Write skewaborts a transaction in 2

    • PostgreSQL 16 REPEATABLE READpostgres-16

    Permits somewhere in the library: Write skewaborts a transaction in 6

    • PostgreSQL 16 SERIALIZABLEpostgres-16

    Permits somewhere in the library: no anomaly in any scheduleaborts a transaction in 8

    • Microsoft SQL Server 2022 READ COMMITTEDsqlserver-2022

    Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 2

Names these engines do not implement at all

  • PostgreSQL 16 SNAPSHOT
  • MySQL InnoDB 8.4 SNAPSHOT
  • Oracle Database 23ai Free READ UNCOMMITTED
  • Oracle Database 23ai Free REPEATABLE READ
  • Oracle Database 23ai Free SNAPSHOT