Первая таблица с транзакциями
This commit is contained in:
BIN
report/img/transaction1_1.png
Normal file
BIN
report/img/transaction1_1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
BIN
report/img/transaction1_2.png
Normal file
BIN
report/img/transaction1_2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
BIN
report/img/transaction1_3.png
Normal file
BIN
report/img/transaction1_3.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.4 KiB |
@@ -671,4 +671,83 @@ $$;
|
|||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Работа 5: Транзакционная модель}
|
||||||
|
\textbf{Задача:} Выбрать определённый уровень изоляции транзакций и продемонстрировать наличие или отсутствие артефактов: <<Грязное чтение>>, <<Неповторяемое чтение>> и <<Фантомы>>.
|
||||||
|
|
||||||
|
Уровень изоляции \texttt{Read Commited} был задан при помощи команды
|
||||||
|
|
||||||
|
\texttt{SET TRANSACTION ISOLATION LEVEL READ COMMITTED;}
|
||||||
|
|
||||||
|
На этом уровне изоляции исключается артефакт <<Грязное чтение>>, однако сохраняются артефакты <<Неповторяемое чтение>> и <<Фантомы>>.
|
||||||
|
|
||||||
|
В таблице~\ref{tbl:bad_read} представлены транзакции, на примере которых демонстрируется отсутствие артефакта <<Грязное чтение>>.
|
||||||
|
|
||||||
|
\begin{table}[h!]
|
||||||
|
\centering
|
||||||
|
% \addtocounter{table}{-1}
|
||||||
|
\caption{Транзакции для демонстрации отсутствия артефакта <<Грязное чтение>>.}
|
||||||
|
\label{tbl:bad_read}
|
||||||
|
\footnotesize
|
||||||
|
\begin{tabularx}{\textwidth}{|c|X|X|}
|
||||||
|
\hline
|
||||||
|
t & Транзакция 1 & Транзакция 2 \\
|
||||||
|
\hline
|
||||||
|
|
||||||
|
\multirow{3}{*}{} & \multicolumn{2}{c|}{
|
||||||
|
\specialcell{
|
||||||
|
В первой транзакции обновляется запись в таблице \texttt{judge}. В момент после обновления \\
|
||||||
|
вторая транзакция читает эту же запись из \texttt{judge}, однако в связи с отсутствием артефакта \\ <<Грязное чтение>> она видит исходную таблицу до обновлений первой транзакции.
|
||||||
|
}
|
||||||
|
}\\
|
||||||
|
\cline{2-3}
|
||||||
|
|
||||||
|
& \multicolumn{2}{c|}{Тут что-то ещё. }\\
|
||||||
|
\cline{2-3}
|
||||||
|
|
||||||
|
& \specialcell{Запуск транзакции 1 \\ \texttt{begin;}} & \specialcell{Запуск транзакции 2 \\ \texttt{begin;}}\\
|
||||||
|
\hline
|
||||||
|
|
||||||
|
$t_1$ &
|
||||||
|
\specialcell{
|
||||||
|
Изменение имени судьи с \texttt{id\_judge = 201}\\ \\
|
||||||
|
% \texttt{select id\_judge, name from judge}\\
|
||||||
|
% \texttt{where id\_judge = 201;}\\
|
||||||
|
\texttt{update judge set name = 'Софа'}\\
|
||||||
|
\texttt{where id\_judge = 201;}\\
|
||||||
|
% \texttt{select id\_judge, name from judge}\\
|
||||||
|
% \texttt{where id\_judge = 201;}\\
|
||||||
|
}
|
||||||
|
\includegraphics[width=1\linewidth]{img/transaction1_2.png}
|
||||||
|
&
|
||||||
|
\\
|
||||||
|
\hline
|
||||||
|
|
||||||
|
$t_2$ &
|
||||||
|
&
|
||||||
|
\specialcell{
|
||||||
|
Получение имени судьи с \texttt{id\_judge = 201} \\
|
||||||
|
и завершение транзакции\\ \\
|
||||||
|
\texttt{select id\_judge, name from judge}\\
|
||||||
|
\texttt{where id\_judge = 201;}\\
|
||||||
|
\texttt{commit;}\\
|
||||||
|
}
|
||||||
|
\includegraphics[width=1\linewidth]{img/transaction1_2.png}
|
||||||
|
\\
|
||||||
|
\hline
|
||||||
|
|
||||||
|
$t_3$ &
|
||||||
|
\specialcell{
|
||||||
|
Отмена внесённых изменений транзакцией 1 \\
|
||||||
|
\texttt{rollback;} \\
|
||||||
|
% \texttt{select id\_judge, name from judge}\\
|
||||||
|
% \texttt{where id\_judge = 201;}\\
|
||||||
|
}
|
||||||
|
\includegraphics[width=1\linewidth]{img/transaction1_3.png}
|
||||||
|
&
|
||||||
|
\\
|
||||||
|
\hline
|
||||||
|
\end{tabularx}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
Reference in New Issue
Block a user