СУБД - контроль параллелизма

В многопрограммной среде, где несколько транзакций могут выполняться одновременно, очень важно контролировать параллельность транзакций. У нас есть протоколы контроля параллелизма для обеспечения атомарности, изоляции и сериализуемости параллельных транзакций. Протоколы контроля параллелизма можно широко разделить на две категории -

  • Протоколы на основе блокировки
  • Протоколы на основе меток времени

Протоколы на основе блокировки

Системы баз данных, оснащенные протоколами на основе блокировок, используют механизм, с помощью которого любая транзакция не может считывать или записывать данные, пока не получит соответствующую блокировку. Замки бывают двух видов -

  • Двоичные блокировки - блокировка элемента данных может находиться в двух состояниях; он либо заблокирован, либо разблокирован.

  • Разделяемый / эксклюзивный - этот тип механизма блокировки различает замки в зависимости от их использования. Если для элемента данных установлена блокировка для выполнения операции записи, это исключительная блокировка. Разрешение на запись более чем одной транзакции в один и тот же элемент данных может привести базу данных в несогласованное состояние. Блокировки чтения являются общими, поскольку значение данных не изменяется.

Доступны четыре типа протоколов блокировки -

Упрощенный протокол блокировки

Упрощенные протоколы на основе блокировок позволяют транзакциям получать блокировку для каждого объекта перед выполнением операции записи. Транзакции могут разблокировать элемент данных после завершения операции записи.

Предварительный запрос протокола блокировки

Протоколы предварительной заявки оценивают их операции и создают список элементов данных, для которых они нуждаются в блокировках. Перед началом выполнения транзакция запрашивает у системы все блокировки, в которых она нуждается заранее. Если все блокировки предоставлены, транзакция выполняется и освобождает все блокировки, когда все ее операции завершены. Если все блокировки не предоставлены, транзакция откатывается и ждет, пока все блокировки не будут предоставлены.

Предварительно утверждая,

Двухфазная блокировка 2PL

Этот протокол блокировки делит фазу выполнения транзакции на три части. В первой части, когда транзакция начинает выполняться, она ищет разрешения для требуемых блокировок. Вторая часть, где транзакция получает все блокировки. Как только транзакция освобождает свою первую блокировку, начинается третья фаза. На этом этапе транзакция не может требовать каких-либо новых блокировок; это только освобождает приобретенные замки.

Двухфазная блокировка

Двухфазная блокировка имеет две фазы, одна растет , где все блокировки приобретаются транзакцией; и вторая фаза сокращается, когда освобождаются блокировки, удерживаемые транзакцией.

Чтобы запросить исключительную блокировку (запись), транзакция должна сначала получить общую (чтение) блокировку, а затем обновить ее до эксклюзивной блокировки.

Строгая двухфазная блокировка

Первая фаза 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).

Протокол заказа меток времени работает следующим образом:

  • Если транзакция Ti выполняет операцию чтения (X) -

    • Если TS (Ti) <W-метка времени (X)
      • Операция отклонена.
    • Если TS (Ti)> = W-метка времени (X)
      • Операция выполнена.
    • Все метки времени элемента данных обновлены.
  • Если транзакция Ti выполняет операцию записи (X) -

    • Если TS (Ti) <R-отметка времени (X)
      • Операция отклонена.
    • Если TS (Ti) <W-метка времени (X)
      • Операция отклонена и Ti откатился назад.
    • В противном случае операция выполнена.

Писать правило Томаса

Это правило гласит, что если TS (Ti) <W-timestamp (X), то операция отклоняется и T i откатывается.

Правила упорядочения меток времени можно изменить, чтобы сделать сериализованным представление расписания.

Вместо того чтобы заставить T i откатываться, сама операция записи игнорируется.