3TS-Coo
3TS-Coo is a consistency check tool for transactional databases. Coo checks the consistency of databases in accurate (all types of anomalies), user-friendly (SQL-based test), and cost-effective (one-time checking in a few minutes) ways. You can check out the code and detailed result on GitHub{:target=”_blank”} branch. Contributions in any kind are welcome.
+The original and executed schedules are available for analysis and debugging. You can click each hyperlink for more detailed test cases and executed results. The formal expressions{:target=”_blank”} of test cases are also available.
+The result behaviors are classified into two types, i.e., anomaly (A) and consistency. For anomaly occurrence, data anomalies are not recognized by databases, resulting in data inconsistencies, meaning the executed schedule with no equivalent serializable execution (or a Partial Order Pair (POP) cycle{:target=”_blank”}). While for the consistent performance, databases either pass (P) the anomaly test cases with a serializable result (no POP cycle) or rollback transactions due to rules (R), deadlock detection (D), or timeout (T) reached. The isolation levels are Serializable (SER), Repeatable Read (RR), Read Committed (RC), Read Uncommitted (RU), and Snapshot Isolation (SI).
+Interesting results
Please check out the below results of Oracle 21.3.0, TDSQL 2.0.1, and PostgreSQL 12.4.
+ + +| + | No. | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | +9 | +10 | +11 | +12 | +13 | +14 | +15 | +16 | +17 | +18 | +19 | +20 | +21 | +22 | +23 | +24 | +25 | +26 | +27 | +28 | +29 | +30 | +31 | +32 | +33 | +34 | +35 | +
| Databases Versions Report date |
+ Test case | +Dirty Read | +Non-repeatable Read | +Intermediate Read | +Intermediate Read Committed | +Lost Self Update | +Write-read Skew | +Write-read Skew Committed | +Double-write Skew 1 | +Double-writeSkew 1 Committed | +Double-write Skew 2 | +Read Skew | +Read Skew 2 | +Read Skew 2 Committed | +Step RAT | +Dirty Write | +Full-write | +Full-write Committed | +Lost Update | +Lost Self Update Committed | +Double-write Skew 2 Committed | +Full-write Skew | +Full-write Skew Committed | +Read-write Skew 1 | +Read-write Skew 2 | +Read-write Skew 2 Committed | +Step WAT | +Non-repeatable Read Committed | +Lost Update Committed | +Read Skew Committed | +Read-writeSkew 1 Committed | +Write Skew | +Write Skew Committed | +Step IAT | +Non-repeatable Read Predicate | +Write Skew Predicate | +
| Oracle v21.3.0 2022.05.26 |
+ SER | +P | +P | +P | +P | +R | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +D | +D | +R | +R | +R | +D | +P | +R | +P | +R | +A | +R | +R | +P | +R | +
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +P | +A | +|
| TDSQL v2.0.1 2022.05.26 |
+ SER | +P | +P | +P | +P | +P | +R | +R | +R | +R | +R | +R | +R | +R | +R | +P | +P | +P | +R | +P | +R | +D | +D | +R | +R | +R | +D | +P | +R | +R | +R | +R | +R | +R | +P | +R | +
| RR | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +P | +A | +P | +A | +A | +A | +A | +P | +A | +|
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +P | +A | +|
| PostgreSQL v12.4 2022.05.26 |
+ SER | +P | +P | +P | +P | +R | +R | +R | +R | +R | +R | +P | +P | +P | +R | +R | +R | +R | +R | +R | +R | +D | +D | +R | +R | +R | +D | +P | +R | +P | +R | +R | +R | +R | +P | +R | +
| RR | +P | +P | +P | +P | +R | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +D | +D | +R | +R | +R | +D | +P | +R | +P | +R | +A | +A | +A | +P | +A | +|
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +P | +A | +
Tested results
The below is the result of checking MySQL 8.0.20, MyRocks 8.0.26, SQL Server 15.0, TiDB 4.0.5/5.4.0, Oracle 12.1.0, OceanBase XE 2.2.50, OceanBase CE 3.1.2, Greenplum 6.20, CockroachDB 19.2.2, and MongoDB 4.4.4.
+ +| + | No. | +1 | +2 | +3 | +4 | +5 | +6 | +7 | +8 | +9 | +10 | +11 | +12 | +13 | +14 | +15 | +16 | +17 | +18 | +19 | +20 | +21 | +22 | +23 | +24 | +25 | +26 | +27 | +28 | +29 | +30 | +31 | +32 | +33 | +
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Databases Versions Report date |
+ Test case | +Dirty Read | +Non-repeatable Read | +Intermediate Read | +Intermediate Read Committed | +Lost Self Update | +Write-read Skew | +Write-read Skew Committed | +Double-write Skew 1 | +Double-writeSkew 1 Committed | +Double-write Skew 2 | +Read Skew | +Read Skew 2 | +Read Skew 2 Committed | +Step RAT | +Dirty Write | +Full-write | +Full-write Committed | +Lost Update | +Lost Self Update Committed | +Double-write Skew 2 Committed | +Full-write Skew | +Full-write Skew Committed | +Read-write Skew 1 | +Read-write Skew 2 | +Read-write Skew 2 Committed | +Step WAT | +Non-repeatable Read Committed | +Lost Update Committed | +Read Skew Committed | +Read-writeSkew 1 Committed | +Write Skew | +Write Skew Committed | +Step IAT | +
| MySQL v8.0.20 2022.04.30 |
+ SER | +P | +P | +P | +P | +P | +D | +D | +D | +D | +D | +D | +D | +D | +D | +P | +P | +P | +D | +P | +D | +D | +D | +D | +D | +D | +D | +P | +D | +D | +D | +D | +D | +D | +
| RR | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +P | +A | +P | +A | +A | +A | +A | +|
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +|
| RU | +A | +A | +A | +A | +P | +A | +A | +A | +A | +A | +A | +A | +A | +A | +P | +P | +P | +A | +P | +A | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +|
| MyRocks v8.0.26 2022.04.30 |
+ SER | +P | +P | +P | +P | +P | +D | +D | +D | +D | +D | +D | +D | +D | +D | +P | +P | +P | +D | +P | +D | +D | +D | +D | +D | +D | +D | +P | +D | +D | +D | +D | +D | +D | +
| RR | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +P | +A | +P | +A | +A | +A | +A | +|
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +|
| RU | +A | +A | +A | +A | +P | +A | +A | +A | +A | +A | +A | +A | +A | +A | +P | +P | +P | +A | +P | +A | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +|
| SQL Server v15.0 2022.04.30 |
+ SER | +P | +P | +P | +P | +P | +D | +D | +D | +D | +D | +D | +D | +D | +D | +P | +P | +P | +P | +P | +D | +D | +D | +D | +D | +D | +D | +P | +P | +D | +D | +D | +D | +D | +
| SI | +P | +P | +P | +P | +R | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +D | +D | +R | +R | +R | +D | +P | +R | +P | +R | +A | +A | +A | +|
| RR | +P | +P | +P | +P | +P | +D | +D | +D | +D | +D | +D | +D | +D | +D | +P | +P | +P | +P | +P | +D | +D | +D | +D | +D | +D | +D | +P | +P | +D | +D | +D | +D | +D | +|
| RC | +P | +A | +P | +P | +P | +D | +D | +D | +D | +D | +A | +A | +A | +D | +P | +P | +P | +A | +P | +D | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +|
| RU | +A | +A | +A | +A | +P | +A | +A | +A | +A | +A | +A | +A | +A | +A | +P | +P | +P | +A | +P | +A | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +|
| TiDB v4.0.5/v5.4.0 2022.04.30 |
+ OPT | +P | +P | +P | +P | +R | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +R | +R | +R | +R | +R | +R | +P | +R | +P | +R | +A | +A | +A | +
| RR | +P | +P | +P | +P | +P | +A | +A | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +P | +A | +P | +A | +A | +A | +A | +|
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +|
| Oracle v12.1.0 2022.04.30 |
+ SER | +P | +P | +P | +P | +R | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +D | +D | +R | +R | +R | +D | +P | +R | +P | +R | +A | +R | +R | +
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +D | +A | +A | +A | +A | +A | +A | +A | +|
| OceanBase XE v2.2.50 2022.04.30 |
+ SER | +P | +P | +P | +P | +R | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +T | +T | +R | +R | +R | +T | +P | +R | +P | +R | +A | +A | +A | + +
| RR | +P | +P | +P | +P | +R | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +T | +T | +R | +R | +R | +T | +P | +R | +P | +R | +A | +A | +A | + +|
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +T | +T | +A | +A | +A | +T | +A | +A | +A | +A | +A | +A | +A | + +|
| OceanBase CE v3.1.0 2022.04.30 |
+ RR | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +T | +T | +A | +A | +A | +T | +A | +A | +A | +A | +A | +A | +A | + +
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +T | +T | +A | +A | +A | +T | +A | +A | +A | +A | +A | +A | +A | + +|
| Greenplum v6.20.0 2022.04.30 |
+ SER | +P | +P | +P | +P | +R | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +D | +D | +R | +R | +R | +D | +P | +R | +P | +R | +A | +A | +A | +
| RC | +P | +P | +P | +P | +P | +A | +P | +P | +P | +P | +P | +P | +P | +A | +P | +P | +P | +A | +P | +P | +D | +D | +A | +A | +A | +P | +A | +A | +A | +A | +A | +A | +A | +|
| CockroachDB v19.2.2 2022.04.30 |
+ SER | +P | +P | +P | +P | +P | +P | +P | +R | +R | +P | +P | +P | +P | +P | +P | +P | +P | +R | +P | +P | +D | +D | +R | +R | +R | +D | +P | +R | +P | +R | +R | +R | +R | +
| MongoDB v4.4.4 2022.04.30 |
+ SI | +P | +P | +P | +P | +P | +A | +A | +R | +R | +R | +P | +P | +P | +A | +R | +R | +R | +R | +R | +R | +R | +R | +R | +R | +R | +R | +P | +R | +P | +R | +A | +A | +A | +
Follow up
We are testing the scenarios with predicates. Please stay tuned!
+Contact
axingguchen(AT)tencent(dot)com; blueseali(AT)tencent(dot)com
+ + +