СУБД - Контроль параллелизма
В многопрограммной среде, где несколько транзакций могут выполняться одновременно, очень важно контролировать параллелизм транзакций. У нас есть протоколы управления параллелизмом для обеспечения атомарности, изоляции и сериализации параллельных транзакций. Протоколы управления параллелизмом можно условно разделить на две категории:
- Протоколы на основе блокировки
- Протоколы на основе меток времени
Протоколы на основе блокировки
Системы баз данных, оснащенные протоколами на основе блокировок, используют механизм, с помощью которого любая транзакция не может читать или записывать данные, пока не установит для них соответствующую блокировку. Замки бывают двух видов -
Binary Locks- Блокировка элемента данных может быть в двух состояниях; он либо заблокирован, либо разблокирован.
Shared/exclusive- Этот тип механизма блокировки отличает замки на основе их использования. Если блокировка получена на элементе данных для выполнения операции записи, это исключительная блокировка. Разрешение более чем одной транзакции записывать в один и тот же элемент данных может привести базу данных в несогласованное состояние. Блокировки чтения являются общими, поскольку значения данных не изменяются.
Доступны четыре типа протоколов блокировки -
Упрощенный протокол блокировки
Упрощенные протоколы на основе блокировок позволяют транзакциям получить блокировку для каждого объекта перед выполнением операции «записи». Транзакции могут разблокировать элемент данных после завершения операции «записи».
Протокол предварительного запроса блокировки
Протоколы предварительного запроса оценивают свои операции и создают список элементов данных, для которых им необходима блокировка. Перед запуском выполнения транзакция заранее запрашивает у системы все необходимые блокировки. Если все блокировки предоставлены, транзакция выполняется и снимает все блокировки, когда все ее операции завершены. Если все блокировки не предоставлены, транзакция откатывается и ждет, пока не будут предоставлены все блокировки.
Двухфазная блокировка 2PL
Этот протокол блокировки разделяет фазу выполнения транзакции на три части. В первой части, когда транзакция начинает выполняться, она запрашивает разрешение на требуемые блокировки. Во второй части транзакция получает все блокировки. Как только транзакция снимает первую блокировку, начинается третья фаза. На этом этапе транзакция не может требовать новых блокировок; он только освобождает приобретенные блокировки.
Двухфазная блокировка имеет две фазы, одна из которых growing, где все блокировки приобретаются транзакцией; и вторая фаза - сокращение, когда блокировки, удерживаемые транзакцией, снимаются.
Чтобы потребовать исключительную блокировку (запись), транзакция должна сначала получить разделяемую блокировку (чтение), а затем обновить ее до исключительной блокировки.
Строгая двухфазная блокировка
Первый этап Strict-2PL аналогичен 2PL. После получения всех блокировок на первом этапе транзакция продолжает нормально выполняться. Но в отличие от 2PL, Strict-2PL не снимает блокировку после его использования. Strict-2PL удерживает все блокировки до точки фиксации и снимает все блокировки за раз.
Strict-2PL не имеет каскадного прерывания, как 2PL.
Протоколы на основе отметок времени
Наиболее часто используемый протокол параллелизма - это протокол на основе меток времени. В этом протоколе в качестве отметки времени используется системное время или логический счетчик.
Протоколы на основе блокировки управляют порядком между конфликтующими парами среди транзакций во время выполнения, тогда как протоколы на основе временных меток начинают работать, как только транзакция создается.
У каждой транзакции есть временная метка, и порядок определяется возрастом транзакции. Транзакция, созданная в 0002 часах, будет старше, чем все остальные транзакции, следующие за ней. Например, любая транзакция «y», поступающая в систему по адресу 0004, на две секунды моложе, и приоритет будет отдан более старой.
Кроме того, каждому элементу данных дается последняя отметка времени чтения и записи. Это позволяет системе узнать, когда была выполнена последняя операция «чтения и записи» для элемента данных.
Протокол заказа меток времени
Протокол упорядочивания временных меток обеспечивает сериализуемость транзакций в их конфликтующих операциях чтения и записи. Это ответственность системы протокола за выполнение конфликтующей пары задач в соответствии со значениями временных меток транзакций.
- Отметка времени транзакции T i обозначается как TS (T i ).
- Отметка времени чтения элемента данных X обозначается R-отметкой времени (X).
- Отметка времени записи элемента данных X обозначается W-отметкой времени (X).
Протокол заказа временных меток работает следующим образом -
If a transaction Ti issues a read(X) operation −
- Если TS (Ti) <W-timestamp (X)
- Операция отклонена.
- Если TS (Ti)> = W-timestamp (X)
- Операция выполнена.
- Все временные метки элементов данных обновлены.
If a transaction Ti issues a write(X) operation −
- Если TS (Ti) <R-timestamp (X)
- Операция отклонена.
- Если TS (Ti) <W-timestamp (X)
- Операция отклонена, и Ti откатился.
- В противном случае операция выполняется.
Правило записи Томаса
Это правило гласит, что если TS (Ti) <W-timestamp (X), то операция отклоняется и T i откатывается.
Правила упорядочивания по отметкам времени можно изменить, чтобы сделать представление расписания сериализуемым.
Вместо выполнения отката T i игнорируется сама операция «запись».