diff --git a/report/img/transaction1_1.png b/report/img/transaction1_1.png new file mode 100644 index 0000000..40f9fda Binary files /dev/null and b/report/img/transaction1_1.png differ diff --git a/report/img/transaction1_2.png b/report/img/transaction1_2.png new file mode 100644 index 0000000..e56cb1b Binary files /dev/null and b/report/img/transaction1_2.png differ diff --git a/report/img/transaction1_3.png b/report/img/transaction1_3.png new file mode 100644 index 0000000..2cad73e Binary files /dev/null and b/report/img/transaction1_3.png differ diff --git a/report/report.tex b/report/report.tex index e531b42..8d46860 100644 --- a/report/report.tex +++ b/report/report.tex @@ -671,4 +671,83 @@ $$; \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} \ No newline at end of file