86/212
\begin{frame}
  \frametitle{Ensuring Serializability}
  
  So far, we have seen a sufficient condition that
  allows us to check whether a schedule is serializable.
  
  \begin{goal}{}
    But how to ensure serializability \emph{during runtime}?
  \end{goal}
  \pause
  
  \emph{Challenge:} the system does not know in advance which transactions
   will run and which items they will access.
  \pause

  \begin{goal}{Different \emph{strategies} for ensuring serializability}
    \begin{enumerate}
      \item \emph{Pessimistic}
        \begin{itemize}
          \item lock-based concurrency control (needs deadlock detection)
          \item timestamp based concurrency control (not discussed here)
        \end{itemize}
      \item \emph{Optimistic}
        \begin{itemize}
          \item read-set/write-set tracking
          \item validation before commit (transaction might abort)
        \end{itemize}
      \item \emph{Multi-version techniques}
        \begin{itemize}
          \item less concurrency control overhead for read-only queries
        \end{itemize}
    \end{enumerate}
  \end{goal}
\end{frame}

\theme{Two Phase Locking}