\begin{frame} \frametitle{Multiversion Concurrency Control: Snapshot Isolation} \begin{goal}{Multiversion Concurrency Control} \emph{Multiple versions of the data are stored.} The isolation level determines what version a transaction sees. \end{goal} \pause \begin{goal}{Common Isolation Level: \emph{Snapshot Isolation}} Each transaction sees a consistent snapshot of the database that corresponds to the state at the moment it started. \end{goal} \pause \emph{Read-only} transactions never need to be blocked! \begin{itemize} \item might see \emph{outdated}, but \emph{consistent} version of the data \item as if the entire query happened at the moment it started \end{itemize} \pause \begin{block}{} With snapshot isolation: \begin{itemize} \item Read-only transactions do not have to lock anything! \smallskip \item Transactions \emph{conflict if they write the same object}: \begin{itemize} \item Pessimistic concurrency control: only writes are locked \item Optimistic concurrency control: only write-sets interesting \end{itemize} \end{itemize} \end{block} \end{frame}