- •"Мати - российский государственный технологический университет имени к.Э. Циолковского"
- •Курс лекций по дисциплине «базы данных»
- •Москва 2013
- •Введение
- •Для чего нужны базы данных
- •Основные определения
- •Классификация бд
- •Реляционные бд
- •Структура таблиц и типы данных
- •Целостность данных
- •Поддержание ссылочной целостности
- •Правила Кодда
- •Реляционная алгебра
- •Теоретико-множественные операторы Объединение
- •Проекция
- •Соединение
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение
- •Деление
- •Создание таблиц
- •Выборка данных
- •Объединение таблиц
- •Добавление данных
- •Insert into имя_таблицы
- •Values (значение 1, значение 2, …)
- •Values ('Комиксы', 'Не знаю, какая у них история');
- •Values ('Комиксы', 'Не знаю, какая у них история');
- •Values ('Комиксы');
- •Удаление данных
- •Изменение данных
- •Проектирование баз данных
- •Концептуальное проектирование и построение er-модели
- •Логическое проектирование
- •Физическое проектирование
- •Нормализация базы данных
- •Первая нормальная форма.
- •Индексы
- •Общие сведения
- •Кластерные индексы
- •Некластерные индексы
- •Создание индекса
- •Многопользовательский доступ к данным
- •Технология «клиент-сервер»
- •Транзакции
- •Проблемы параллельного доступа.
- •Блокировки и уровни изоляции
- •Грануляция блокировок (уровни блокирования)
- •Хранимые процедуры
- •Понятие хранимой процедуры
- •Типы хранимых процедур
- •Создание, изменение и удаление хранимых процедур
- •Приложения
Блокировки и уровни изоляции
Для предотвращения конфликтов SQL сервер может ограничить одновременный доступ к данным. Запреты на работу с данными называются блокировками. Для поддержки блокировок определены уровни изоляции, которые определяют, какие типы конфликтов допустимы. В табл. 1 перечислены уровни изоляции и операции, разрешенные на каждом уровне.
Табл. 1. Разрешенные операции:
Уровень изоляции |
Потерянное обновление |
«Грязное» чтение |
Неповторяющееся чтение |
Фантомная вставка |
READ UNCOMMITED |
нет |
да |
да |
да |
READ COMMITED |
нет |
нет |
да |
да |
REPEATABLE READ |
нет |
нет |
нет |
да |
SERIALIZABLE |
нет |
нет |
нет |
нет |
READ UNCOMMITED (неподтвержденное чтение). Самый низкий уровень изоляции, поддерживается защита только от потерянного обновления. Если пользователь изменяет данные, другие пользователи не могут изменить их, пока первая транзакция полностью не завершится. Тем не менее, разрешено «грязное чтение», т.е. если первая транзакция запишет какие-то данные, вторая их прочитает, а потом первая транзакция будет отменена, то получится, что вторая транзакция прочитала данные, которые никогда не существовали.
READ COMMITED (подтвержденное чтение). Запрещено «грязное чтение»: если пользователь изменяет данные, другие пользователи не могут считать их, пока изменение (транзакция) полностью не завершится. Однако существует проблема неповторяющегося чтения: если первый пользователь начал работу и прочитал данные, после этого второй пользователь изменил эти же данные и успешно зафиксировал изменения – то первый пользователь будет продолжать работу с уже изменёнными данными.
REPEATABLE READ (повторяющееся чтение). Повторное чтение строки возвратит первоначально считанные данные, любые обновления, произведенные другими пользователями до завершения транзакции, запрещены. Тем не менее, на этом уровне могут возникать фантомы.
SERIALIZABLE (упорядоченность). Самый высокий уровень изоляции. Результат выполнения транзакция такой же, как если бы они выполнялись по очереди. Невозможны никакие ошибки параллельного доступа.
Грануляция блокировок (уровни блокирования)
Заблокировать можно различные объекты БД. Наиболее часто используются следующие уровни блокирования:
уровень БД (база данных, полностью);
уровень страницы (на физическом уровне БД поделена на блоки одного размера (страницы), размер страницы по умолчанию – 8 килобайт, однако его можно изменить);
уровень таблицы;
уровень строки;
В зависимости от уровня блокирования будет изменяться быстродействие базы данных. Блокировка при меньшей гранулярности, например на уровне строк, увеличивает параллелизм, но в то же время увеличивает расходы на обработку, поскольку при большом количестве блокируемых строк требуется больше блокировок.
