
16 Вопрос
Правила блокировки транзакций
На практике для обеспечения упорядочиваемости параллельно выполняемых транзакций чаще всего используется метод блокировки. Он работает следующим образом – из двух конкурирующих транзакций будет выполняться та, которая началась раньше, а другая будет ждать своей очереди в режиме блокирования.
Разделяемая блокировка. Если в транзакции установлена разделяемая блокировка элемента данных, то в ней может выполняться чтение этого элемента, но не его обновление.
Исключительная блокировка. Если в транзакции установлена исключительная блокировка элемента данных, то в ней могут выполняться и чтение, и обновление этого элемента.
Особые блокировки
Защелки блокировки особого типа, которые устанавливаются на гораздо менее продолжительный период, чем обычные блокировки. Защелка может быть применена перед выполнением операции чтения или записи страницы памяти на диск для обеспечения неразрывности (или атомарности) такой операции ввода-вывода. Например, перед записью страницы данных из буферов базы данных на диск может быть установлена защелка, страница записана на диск, а затем защелка немедленно снята
Взаимоблокировка. Тупиковая ситуация, которая может возникнуть, когда две (или более) транзакции находятся во взаимном ожидании освобождения блокировок, удерживаемых друг другом. Если в системе возникает состояние взаимоблокировки, вовлеченные в него приложения не смогут разрешить данную проблему собственными силами. Ответственность за обнаружение взаимоблокировок и выхода тем или иным образом из этой тупиковой ситуации должна быть возложена на СУБД. Подобное действие в любом случае будет сопровождаться глобальным откатом всех изменений, внесенных взаимоблокированными транзакциями. Затем СУБД обязана автоматически перезапустить все отмененные ею транзакции.
17 Вопрос
Управление параллельным доступом к разделяемым данным
Важнейшей целью создания баз данных является организация параллельного доступа многих пользователей к общим данным, используемым ими совместно. Обеспечить параллельный доступ относительно несложно, если все пользователи будут только читать данные, помещенные в базу. В этом случае работа каждого из них не оказывает влияния на работу остальных пользователей. Но если два или несколько пользователей одновременно обращаются к базе данных и хотя бы одному из них потребуется обновить хранимую в базе информацию, возможно взаимное влияние процессов доступа, способное привести к несогласованности данных.
Данная задача подобна задачам, стоящим перед любой многопользовательской компьютерной системой, когда несколько программ (или транзакций) получают возможность одновременно выполнять операции благодаря многозадачной параллельной организации работы, позволяющей двум или нескольким программам (или транзакциям) выполняться в одно и то же время.
Например, многие системы включают подсистему ввода-вывода, способную выполнять операции ввода-вывода, в то время как процессор осуществляет другие операции. Подобные системы позволяют двум или нескольким транзакциям выполняться одновременно. Система начинает выполнение первой транзакции и продолжает ее выполнение до первой операции ввода-вывода. На время выполнения этой операции система приостанавливает выполнение первой транзакции и переходит к выполнению команд второй транзакции. Когда второй транзакции понадобится выполнить операцию ввода-вывода, управление будет возвращено первой транзакции, и ее выполнение будет продолжено с той точки, в которой она была приостановлена. Выполнение первой транзакции будет продолжено до достижения следующей операции ввода-вывода. Таким образом, выполнение операций двух транзакций чередуется и обеспечивается их параллельное выполнение.