Читайте также:
|
|
В многопользовательских системах с одной БД, вообще говоря, одновременно могут работать несколько пользователей или прикладных программ. Одной из основных задач СУБД является обеспечение изолированности пользователей, т. е. создание такого режима работы, чтобы каждому из пользователей казалось, что он работает с БД в одиночку. Такую задачу СУБД принято иногда называть «параллелизмом транзакции».
При параллельной обработке БД возникает три основных проблемы:
• проблема потери результатов обновления заключается, в первую очередь, в том, что транзакция может быть не завершена из-за того, что данные, которые она обрабатывает, могут быть модифицированы другой транзакцией;
• проблема незафиксированности зависимости состоит в том, что транзакция может использовать для работа данные, которые в настоящий момент модифицируются другой транзакцией. Понятно, что первая из них вполне может работать с данными, которые по завершении второй транзакции в БД просто будут отсутствовать;
• проблема несовместимого анализа связана с тем, что в результате модификации БД транзакцией другая транзакция может внести в БД некую информацию, которая не будет соответствовать целостному состоянию БД. Для решения этих проблем используют «блокировку» - метод управления параллельными процессами, при котором объект БД, например, кортеж не может быть модифицирован без ведома транзакции. Т. е. результатом блокировки является блокирование доступа к объекту со стороны других транзакций, чем исключается непредсказуемое изменение объекта.
Различают два вида блокировки:
• «блокировка записи» — при этом транзакция блокирует кортеж таким образом, что запрос другой транзакции к этому кортежу будет отменен;
«блокировка чтения» - в этом случае транзакция блокирует кортеж так, что запрос со стороны другой транзакции на блокировку записи этого кортежа будет отвергнут, а на блокировку чтения – принят.
В СУБД используют «протокол доступа к данным», позволяющий избежать проблем параллелизма. Его суть заключается в следующем:
транзакция, результатом действия которой на кортеж является его извлечение, обязана наложить блокировку чтения на этот кортеж;
транзакция, предназначенная для модификации кортежа, обязана наложить блокировку записи на этот кортеж;
в случае, если запрашиваемая блокировка на кортеж отвергается из-за того, что на кортеж уже наложена блокировка, то транзакция переводится в режим ожидания до тех пор, пока блокировка не будет снята;
блокировка записи сохраняется вплоть до конца выполнения транзакции, т, е. до выполнения операторов СОММIТ или ROLLВАСК.
Решение проблем, параллельной обработки БД заключается в том, что кортеж блокируется, а последующие транзакции, модифицирующие этот кортеж, отвергаются и переводятся в режим ожидания.
В связи со свойством сохранения целостности БД транзакции являются подходящими единицами изолированности пользователей. Действительно, если каждый сеанс работы с БД реализуется транзакцией, то каждый пользователь начинает работу с согласованным состоянием БД, т. е. с таким ее состоянием, в котором она могла бы находиться, даже если бы пользователь работал с ней в одиночку.
Дата добавления: 2015-09-10; просмотров: 170 | Поможем написать вашу работу | Нарушение авторских прав |
<== предыдущая лекция | | | следующая лекция ==> |
Транзакции | | | Безопасность баз данных |