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