
- •Лекция 8 (написать в журнале: Базы данных и субд. Функции субд) Типовая организация субд
- •Ядро субд
- •Процессор запросов
- •Утилиты
- •Менеджер памяти
- •Менеджер транзакций
- •Размеры блокируемых элементов
- •Блокировка
- •Регистрация
- •Завершение транзакции
- •Физическая и логическая независимость. (Архитектура базы данных.)
- •Процесс прохождения пользовательского запроса
- •Пользователи банков данных
- •Основные функции группы администратора бд
Менеджер транзакций
Компонент менеджер транзакций отвечает за целостность БД. Он должен обеспечить одновременную обработку множества запросов, отсутствие наложения запросов и защиту данных на случай выхода системы из строя. Он взаимодействует с менеджером запросов, так как должен знать, на какие данные воздействуют текущие запросы (чтобы избежать конфликтных ситуаций), и может отложить определенные запросы или операции, чтобы избежать конфликтов. Он взаимодействует также с менеджером памяти, так как схемы защиты данных обычно включают в себя хранение файла регистрации изменений данных - журнала. При правильном порядке выполнения операций журнал будет содержать запись изменений, поэтому можно заново выполнить даже те изменения, которые не достигли диска из-за сбоя в системе.
Часто система БД допускает параллельную поддержку множества транзакций (например, что-то может происходить на нескольких банкоматах одновременно). Гарантировать правильное выполнение всех таких транзакций — задача компонента СУБД, называемого менеджером транзакций.
Размеры блокируемых элементов
СУБД могут различаться в соответствии с тем, какие виды элементов данных имеют блокировки. Например, можно блокировать отдельные кортежи отношения, отдельные дисковые блоки или целые отношения. Чем больше элемент, имеющий блокировку, тем больше вероятность, что одна транзакция должна ждать завершения другой, даже если они не имеют реального доступа к одним и тем же данным. Однако чем меньше блокируемый элемент, тем больше и сложнее механизм блокировки.
Блокировка
Главной причиной отсутствия изоляции транзакций является то, что транзакции считывают или записывают в БД один и тот же экземпляр данных. Например, если две транзакции пытаются одновременно записать новый баланс одного и того же счета, одна из записей будет внесена поверх другой, в результате чего первая запись будет утрачена. В большинстве СУБД менеджер транзакций может блокировать элементы, к которым транзакция осуществляет доступ. Пока одна транзакция блокирует элемент данных, другая транзакция не имеет к нему доступа. Например, блокировав счет 12345, первая транзакция может читать его и вносить новое значение до того, как другая транзакция получит к нему доступ. Вторая транзакция прочтет уже новый, а не старый баланс, и обе транзакции могут вполне успешно взаимодействовать.
Регистрация
Регистрация всех начатых транзакций, изменения в БД, вызванные каждой транзакцией, и завершение каждой из них осуществляются менеджером транзакций. Регистрация всегда записывается в памяти, на носитель типа диска, где данные могут пережить сбой питания. В то время как сама транзакция в отдельных операциях может использовать изменяющуюся основную память, регистрация всегда немедленно вносится на диск. Регистрация всех операций — важный фактор обеспечения свойства долговременности.
Завершение транзакции
Для обеспечения долговременности и атомарности транзакции обычно выполняются "пробным" способом, при котором изменения БД подсчитываются, но не вносятся в саму БД. Когда транзакция готова к окончанию работы, или к завершению, изменения копируются в протокол, который в первую очередь копируется на диск, и только после этого изменения вносятся в саму БД.
Даже если сбой системы происходит между этими шагами, после ее восстановления можно прочесть протокол и узнать, какие еще изменения нужно внести в БД. Если сбой системы происходит до того, как изменения были внесены в протокол, можно повторить транзакцию, не опасаясь, например, что дважды забронировано одно и то же место в самолете или дважды внесен один и тот же дебет в банковский счет.