Управление параллелизмом СУБД: временные метки и протоколы на основе блокировок
Что такое управление параллелизмом?
Контроль параллелизма В системе управления базами данных — это процедура управления одновременными операциями, не конфликтующими друг с другом. Это гарантирует, что транзакции базы данных выполняются одновременно и точно для получения правильных результатов без нарушения целостности данных соответствующей базы данных.
Одновременный доступ довольно прост, если все пользователи просто читают данные. Они не могут мешать друг другу. Хотя для любой практической базы данных она будет включать в себя сочетание операций ЧТЕНИЕ и ЗАПИСЬ, и, следовательно, параллелизм является проблемой.
СУБД Concurrency Control используется для разрешения таких конфликтов, которые чаще всего возникают в многопользовательской системе. Таким образом, управление параллелизмом является наиболее важным элементом для правильного функционирования системы управления базами данных, где одновременно выполняются две или более транзакции базы данных, требующие доступа к одним и тем же данным.
Потенциальные проблемы параллелизма
Вот некоторые проблемы, с которыми вы, вероятно, столкнетесь при использовании метода управления параллелизмом СУБД:
- Утраченные обновления происходит, когда несколько транзакций выбирают одну и ту же строку и обновляют ее на основе выбранного значения
- Проблемы незафиксированных зависимостей возникают, когда вторая транзакция выбирает строку, которая обновляется другой транзакцией (грязное чтение)
- Неповторяемое чтение происходит, когда вторая транзакция пытается получить доступ к одной и той же строке несколько раз и каждый раз считывает разные данные.
- Неправильная сводка происходит, когда одна транзакция суммирует значения всех экземпляров повторяющегося элемента данных, а вторая транзакция обновляет несколько экземпляров этого конкретного элемента данных. В этой ситуации полученная сводка не отражает правильный результат.
Зачем использовать метод параллелизма?
Причины использования метода управления параллелизмом – СУБД:
- Применить изоляцию посредством взаимного исключения между конфликтующими транзакциями.
- Для решения проблем, связанных с конфликтами чтения-записи и записи-записи.
- Сохранить согласованность базы данных за счет постоянного сохранения препятствий выполнения.
- Системе необходимо контролировать взаимодействие между параллельными транзакциями. Этот контроль достигается с помощью схем параллельного управления.
- Управление параллелизмом помогает обеспечить сериализуемость.
Пример
Предположим, что два человека одновременно идут к электронным киоскам, чтобы купить билет в кино на один и тот же фильм и на одно и то же время сеанса.
Однако на киносеанс в этом кинотеатре осталось только одно место. Без управления параллелизмом в СУБД возможно, что оба кинозрителя в конечном итоге купят билет. Однако метод управления параллелизмом не позволяет этого сделать. Оба кинозрителя по-прежнему могут получить доступ к информации, записанной в базе данных мест в кинотеатрах. Однако управление параллелизмом предоставляет билет только тому покупателю, который первым завершил процесс транзакции.
Протоколы управления параллелизмом
Различные протоколы управления параллелизмом предлагают разные преимущества между объемом параллелизма, который они допускают, и объемом накладных расходов, которые они налагают. Ниже приведены методы управления параллелизмом в СУБД:
- Протоколы на основе блокировок
- Протокол двухфазной блокировки
- Протоколы на основе временных меток
- Протоколы, основанные на проверке
Протоколы на основе блокировки
Протоколы на основе блокировок в СУБД — это механизм, в котором транзакция не может читать или записывать данные, пока не получит соответствующую блокировку. Протоколы на основе блокировки помогают устранить проблему параллелизма в СУБД для одновременных транзакций путем блокировки или изоляции конкретной транзакции для одного пользователя.
Блокировка — это переменная данных, связанная с элементом данных. Эта блокировка означает, что с элементом данных можно выполнять операции. Блокировки в СУБД помогают синхронизировать доступ к элементам базы данных посредством параллельных транзакций.
Все запросы на блокировку отправляются менеджеру управления параллелизмом. Транзакции продолжаются только после удовлетворения запроса на блокировку.
Бинарные блокировки: Двоичная блокировка элемента данных может находиться в заблокированном или разблокированном состоянии.
Общие/эксклюзивные: Этот тип механизма блокировки разделяет блокировки в СУБД в зависимости от их использования. Если блокировка устанавливается на элемент данных для выполнения операции записи, это называется эксклюзивной блокировкой.
1. Общий замок (S):
Общая блокировка также называется блокировкой только для чтения. Благодаря общей блокировке элемент данных может использоваться совместно между транзакциями. Это связано с тем, что у вас никогда не будет разрешения на обновление данных в элементе данных.
Например, рассмотрим случай, когда две транзакции считывают баланс счета человека. база данных позволит им читать, установив общую блокировку. Однако, если другая транзакция захочет обновить баланс этой учетной записи, общая блокировка предотвратит это до тех пор, пока процесс чтения не завершится.
2. Эксклюзивный замок (X):
Благодаря эксклюзивной блокировке элемент данных можно как читать, так и записывать. Это является эксклюзивным и не может храниться одновременно в одном и том же элементе данных. X-lock запрашивается с помощью инструкции lock-x. Транзакции могут разблокировать элемент данных после завершения операции записи.
Например, когда транзакция требует обновления баланса счета человека. Вы можете разрешить эту транзакцию, установив на нее блокировку X. Поэтому, когда вторая транзакция хочет выполнить чтение или запись, монопольная блокировка предотвращает эту операцию.
3. Упрощенный протокол блокировки
Этот тип протоколов на основе блокировки позволяет транзакциям блокировать каждый объект перед началом операции. Транзакции могут разблокировать элемент данных после завершения операции записи.
4. Предварительная блокировка
Протокол блокировки предварительного запроса помогает оценить операции и создать список необходимых элементов данных, которые необходимы для инициирования процесса выполнения. В ситуации, когда все блокировки предоставлены, транзакция выполняется. После этого все блокировки снимаются, когда все операции завершены.
Голодание
«Голод» — это ситуация, когда транзакции необходимо ждать в течение неопределенного периода времени, чтобы получить блокировку.
Причины голодания следующие:
- Когда схема ожидания заблокированных элементов не управляется должным образом
- В случае утечки ресурсов
- Одна и та же транзакция неоднократно выбирается в качестве жертвы
Deadlock
Тупик относится к конкретной ситуации, когда два или более процесса ждут друг друга, чтобы освободить ресурс, или более двух процессов ожидают ресурса в циклической цепочке.
Протокол двухфазной блокировки
Протокол двухфазной блокировки также известный как протокол 2PL, представляет собой метод управления параллелизмом в СУБД, который обеспечивает сериализуемость путем применения блокировки к данным транзакции, которая блокирует другие транзакции для одновременного доступа к тем же данным. Протокол двухфазной блокировки помогает устранить проблему параллелизма в СУБД.
Этот протокол блокировки делит фазу выполнения транзакции на три разные части.
- На первом этапе, когда транзакция начинает выполняться, ей требуется разрешение на необходимые ей блокировки.
- Во второй части транзакция получает все блокировки. Когда транзакция снимает свою первую блокировку, начинается третья фаза.
- На этом третьем этапе транзакция не может требовать новых блокировок. Вместо этого он только освобождает приобретенные блокировки.
Протокол двухфазной блокировки позволяет каждой транзакции отправлять запрос на блокировку или разблокировку в два этапа:
- Фаза роста: на этом этапе транзакция может получить блокировки, но не может снять какие-либо блокировки.
- Фаза сокращения: на этом этапе транзакция может снять блокировки, но не получить новую блокировку.
Это правда, что протокол 2PL предлагает сериализуемость. Однако это не гарантирует, что взаимоблокировок не произойдет.
На приведенной выше диаграмме вы можете видеть, что локальные и глобальные детекторы взаимоблокировок ищут взаимоблокировки и решают их, возвращая транзакции в исходное состояние.
Строгий метод двухфазной блокировки
Строгая двухфазная система блокировки практически аналогична 2PL. Единственное отличие состоит в том, что Strict-2PL никогда не снимает блокировку после ее использования. Он удерживает все блокировки до момента фиксации и снимает все блокировки за один раз, когда процесс завершается.
Централизованный 2PL
В Centralized 2 PL за процесс управления блокировками отвечает один сайт. Имеет только один менеджер блокировок для всей СУБД.
Первичная копия 2PL
Механизм первичного копирования 2PL, многие менеджеры блокировок распределены по разным сайтам. После этого за управление блокировкой набора элементов данных отвечает конкретный менеджер блокировок. Когда основная копия обновлена, изменение распространяется на подчиненные устройства.
Распределенный 2PL
В этом виде двухфазного механизма блокировки менеджеры блокировки распространяются на все сайты. Они отвечают за управление блокировками данных на этом сайте. Если данные не реплицируются, это эквивалентно первичной копии 2PL. Затраты на связь при распределенном 2PL значительно выше, чем при использовании первичной копии 2PL.
Протоколы на основе временных меток
Протокол на основе временных меток в СУБД — это алгоритм, который использует системное время или логический счетчик в качестве отметки времени для сериализации выполнения параллельных транзакций. Протокол на основе временных меток гарантирует, что все конфликтующие операции чтения и записи выполняются в порядке временных меток.
В этом методе более старая транзакция всегда имеет приоритет. Он использует системное время для определения отметки времени транзакции. Это наиболее часто используемый протокол параллелизма.
Протоколы на основе блокировки помогают вам управлять порядком между конфликтующими транзакциями при их выполнении. Протоколы на основе временных меток управляют конфликтами сразу после создания операции.
Пример:
Suppose there are there transactions T1, T2, and T3. T1 has entered the system at time 0010 T2 has entered the system at 0020 T3 has entered the system at 0030 Priority will be given to transaction T1, then transaction T2 and lastly Transaction T3.
Наши преимущества:
- Расписания сериализуемы, как и протоколы 2PL.
- Никакого ожидания транзакции, что исключает возможность взаимоблокировок!
Минусы:
Возможен голод, если одна и та же транзакция перезапускается и постоянно прерывается.
Протокол на основе валидации
Протокол, основанный на проверке в СУБД, также известный как метод оптимистического управления параллелизмом, представляет собой метод, позволяющий избежать параллелизма в транзакциях. В этом протоколе обновляются локальные копии данных транзакции, а не сами данные, что приводит к меньшему количеству помех при выполнении транзакции.
Протокол, основанный на валидации, выполняется в следующие три этапа:
- Фаза чтения
- Фаза проверки
- Фаза записи
Фаза чтения
На этапе чтения значения данных из базы данных могут быть прочитаны транзакцией, но операция записи или обновления применяются только к локальным копиям данных, а не к фактической базе данных.
Фаза проверки
На этапе проверки данные проверяются, чтобы убедиться в отсутствии нарушений сериализуемости при применении обновлений транзакций к базе данных.
Фаза записи
На этапе записи обновления применяются к базе данных, если проверка прошла успешно, в противном случае; обновления не применяются, и транзакция откатывается.
Характеристики хорошего протокола параллелизма
Идеальный механизм управления параллелизмом СУБД преследует следующие цели:
- Должен быть устойчивым к сбоям в работе сайта и связи.
- Это позволяет параллельное выполнение транзакций для достижения максимального параллелизма.
- Его механизмы хранения и вычислительные методы должны быть скромными, чтобы минимизировать накладные расходы.
- Он должен налагать некоторые ограничения на структуру атомарных действий транзакций.
Итого
- Управление параллелизмом — это процедура, СУБД для управления одновременными операциями, не конфликтуя друг с другом.
- Потерянные обновления, грязное чтение, неповторяемое чтение и неправильная сводная информация — это проблемы, возникающие из-за отсутствия контроля параллелизма.
- На основе блокировки, двухфазный, на основе временных меток, на основе проверки — это типы протоколов обработки параллелизма.
- Блокировка может быть общей (S) или эксклюзивной (X).
- Протокол двухфазной блокировки, также известный как протокол 2PL, требует, чтобы транзакция получила блокировку после снятия одной из своих блокировок. Он имеет 2 фазы роста и сокращения.
- Алгоритм на основе временных меток использует временную метку для сериализации выполнения параллельных транзакций. В протоколе используется Системное время или логический счет как Временная метка.