  Users who care about their data store it in databases, which (at least in
principle) guarantee some form of transactional isolation. However, experience
shows [Kleppmann 2019, Kingsbury and Patella 2019a] that many databases do not
provide the isolation guarantees they claim. With the recent proliferation of
new distributed databases, demand has grown for checkers that can, by
generating client workloads and injecting faults, produce anomalies that
witness a violation of a stated guarantee. An ideal checker would be sound (no
false positives), efficient (polynomial in history length and concurrency),
effective (finding violations in real databases), general (analyzing many
patterns of transactions), and informative (justifying the presence of an
anomaly with understandable counterexamples). Sadly, we are aware of no
checkers that satisfy these goals.
  We present Elle: a novel checker which infers an Adya-style dependency graph
between client-observed transactions. It does so by carefully selecting
database objects and operations when generating histories, so as to ensure that
the results of database reads reveal information about their version history.
Elle can detect every anomaly in Adya et al's formalism [Adya et al. 2000]
(except for predicates), discriminate between them, and provide concise
explanations of each. This paper makes the following contributions: we present
Elle, demonstrate its soundness, measure its efficiency against the current
state of the art, and give evidence of its effectiveness via a case study of
four real databases.
