Управление структурой многопользовательских БД. Атомарные транзакции. Проблема параллельной обработки запросов
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Администрирование баз данных
ЛЕКЦИЯ 3. УПРАВЛЕНИЕ МНОГОПОЛЬЗОВАТЕЛЬСКИМИ БД.
СОДЕРЖАНИЕ ЛЕКЦИИ:
Управление структурой многопользовательских БД.
Атомарные транзакции.
Проблема параллельной обработки запросов.
2
1. Управление структурой многопользовательских БД
Базы
данных,
одним
из
ключевых
требований
реализации которых является возможность совместной
работы нескольких пользователей с одной и той же
совокупностью
данных
называются
многопользовательскими.
3
Функции администратора БД
1. Управление структурой БД.
2. Управление параллельной обработкой данных (блокировки).
3. Распределение прав и обязанностей по обработке данных (один из
факторов обеспечения безопасности информации).
4. Обеспечение безопасности БД.
5. Осуществление процедур сохранения, восстановления и переноса БД.
6. Управление СУБД.
7. Поддержание репозитория данных в рабочем состоянии.
Волк В.К. Проектирование, программирование, управление
и администрирование БД
4
Функции администратора по управлению структурой БД
1. Участие в разработке БД и приложений:
- оказание поддержки на стадии определения требований к БД;
- Частичное участие в проектировании и реализации БД.
2. Оказание помощи в изменении структуры БД:
- поиск решений во взаимодействии с пользователями;
- оценка воздействия изменений в БД на изменение в бизнес-процессах
организации и опыт взаимодействия пользователя с приложениями баз данных;
- обсуждение вопросов управления конфигурациями БД;
- проработка вариантов решения проблем, возникающих после внесения
изменений в конфигурации БД;
- ведение сопутствующей документации.
5
Управление параллельной обработкой данных – меры и
мероприятия, предпринимаемые с целью ограничить влияние
действий, осуществляемых пользователями во время сеанса
работы с БД друг на друга.
6
2. Атомарные транзакции (LUW)
Ключевая функция
многопользовательских СУБД.
Применяется в большинстве ПО
по управлению базами данных.
АТ (атомарной транзакцией) или LUW
(logical units of work) считаются серии
действий, предпринимаемых с базой
данных, которые выполняются
успешно все, или не выполняются
совсем (в обратном случае).
7
Визуализация проблемы потерянного обновления:
Действия:
1. Добавить данные о новом заказе в таблицу «клиент»;
2. Добавить данные о новом заказе в таблицу «продавец»;
3. Добавить новый заказ в таблицу «заказ».
Решение проблемы LUW через транзакцию:
Транзакция:
1. Добавить данные о новом заказе в таблицу «клиент»;
2. Добавить данные о новом заказе в таблицу «продавец»;
3. Добавить новый заказ в таблицу «заказ».
Если нет ошибок, сохранить транзакцию, иначе – отменить Транзакцию.
8
Логическое описание транзакции
BEGIN Транзакция
Изменить данные Клиент
Изменить данные Продавец
Вставить данные в Заказ
IF Все успешно THEN
COMMIT Транзакция
ELSE
ROLLBACK Транзакция
END IF
USE test;
-- Начало транзакции
BEGIN TRANSACTION
UPDATE Employee
SET Id = 14568
WHERE Id = 10102
IF (@@error <> 0)
-- Отменить транзакцию, если есть
ошибки
ROLLBACK
9
COMMIT
Свойства транзакций
- атомарность (Atomicity);
- согласованность (Consistency);
- изолированность (Isolation);
- долговечность (Durability).
Волк В.К. Проектирование, программирование, управление
и администрирование БД
10
атомарность
согласованность
обеспечивает неделимость набора инструкций,
который модифицирует данные в базе данных
и является частью транзакции. Это означает,
что или выполняются все изменения данных в
транзакции, или в случае любой ошибки
осуществляется откат всех выполненных
изменений
в результате выполнения транзакции база
данных не будет содержать несогласованных
данных. Иными словами, выполняемые
транзакцией трансформации данных
переводят базу данных из одного
согласованного состояния в другое.
11
изолированность
долговечность
отделяет все параллельные транзакции друг
от друга. Активная транзакция не может
видеть модификации данных в параллельной
или незавершенной транзакции. Это означает,
что для обеспечения изоляции для некоторых
транзакций может потребоваться выполнить
откат.
обеспечивает одно из наиболее важных
требований баз данных: сохраняемость
данных. Эффект транзакции должен
оставаться действенным даже в случае
системной ошибки. По этой причине, если в
процессе выполнения транзакции происходит
системная ошибка, то осуществляется откат
для всех выполненных инструкций этой 12
Инструкции Transact-SQL
BEGIN TRANSACTION [
{transaction_name | @trans_var }
[WITH MARK ['description']]]
В параметре transaction_name указывается имя транзакции, которое можно
использовать только в самой внешней паре вложенных инструкций BEGIN
TRANSACTION/COMMIT или BEGIN TRANSACTION/ROLLBACK. В
параметре @trans_var указывается имя определяемой пользователем
переменной, содержащей действительное имя транзакции. Параметр WITH
MARK указывает, что транзакция должна быть отмечена в журнале. Аргумент
description - это строка, описывающая эту отметку. В случае использования
параметра WITH MARK требуется указать имя транзакции.
13
BEGIN DISTRIBUTED TRANSACTION
запускает распределенную транзакцию, которая управляется
Microsoft Distributed Transaction Coordinator (MS DTC координатором распределенных транзакций Microsoft).
Координатором распределенной транзакции является сервер,
запустивший инструкцию BEGIN DISTRIBUTED TRANSACTION,
и поэтому он и управляет выполнением распределенной
транзакции.
Распределенная транзакция - это транзакция, которая
используется на нескольких базах данных и на нескольких
серверах. Поэтому для таких транзакций требуется
координатор для согласования выполнения инструкций на всех
вовлеченных серверах.
14
COMMIT WORK
успешно завершает транзакцию, запущенную инструкцией BEGIN
TRANSACTION. Это означает, что все выполненные транзакцией
изменения фиксируются и сохраняются на диск. Инструкция
COMMIT WORK является стандартной формой этой инструкции.
COMMIT TRANSACTION
функционально равнозначна инструкции COMMIT WORK, с той
разницей, что она принимает определяемое пользователем имя
транзакции. Инструкция COMMIT TRANSACTION является
расширением языка Transact-SQL, соответствующим стандарту
SQL.
15
ROOLBACK WORK
сообщает о неуспешном выполнении транзакции. Используют
инструкцию, в том случае если база данных может оказаться в
несогласованном состоянии. В таком случае выполняется откат всех
произведенных инструкциями транзакции изменений.
SAVE TRANSACTION
устанавливает точку сохранения внутри транзакции. Точка
сохранения (savepoint) определяет заданную точку в транзакции,
так что все последующие изменения данных могут быть отменены
без отмены всей транзакции. (Для отмены всей транзакции
применяется инструкция ROLLBACK.) Инструкция SAVE
TRANSACTION в действительности не фиксирует никаких
выполненных изменений данных. Она только создает метку для
последующей инструкции ROLLBACK, имеющей такую же метку,
как и данная инструкция SAVE TRANSACTION.
16
3. Проблема параллельной обработки запросов
Два источника проблемы параллельной обработки данных или запросов:
Проблема потерянного обновления (lost update problem, LUP) –
пользователи получают при параллельной обработке запроса верные данные
на тот момент, когда они составили запрос.
Проблема непоследовательного чтения (inconsistent read problem, IRP) –
некоторые пользователи получают изначально неверные данные (ситуация,
обратная LUP).
И.В. Ананченко, И.В. Козлов. Администрирование Microsoft
SQL Server
17
Нормальный режим параллельной обработки:
Пользователь:1
Считать элемент 200
Изменить элемент 200
Записать элемент 200
Порядок обработки на сервере БД:
1. Считать элемент 200 для 1
2. Считать элемент 300 для 2
3. Изменить элемент 200 для 1
4. Записать элемент 200 для 1
5. Изменить элемент 300 для 2
6. Записать элемент 300 для 2
Пользователь: 2
Считать элемент 300
Изменить элемент 300
Записать элемент 300
18
Проблемы “потерянного обновления”
Пользователь:1
Считать элемент 100 (кол-во элементов равно 10)
Уменьшить количество элементов на 5
Записать элемент 100
Пользователь: 2
Считать элемент 100 (кол-во элементов равно 10)
Уменьшить количество элементов на 3
Записать элемент 100
Порядок обработки на сервере БД:
1. Считать элемент 100 (для 1)
2. Считать элемент 100 (для 2)
3. Установить количество элементов
равным 5 (для 1)
4. Записать элемент 100 для 1
5. Установить количество элементов
равным 7 (для 2)
6. Записать элемент 100 для 2
19