\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}