Параллельное управление процессами в базе данных
4. Проблемы параллельного выполнения процессов, модифицирующих БД. Пессимистическое и оптимистическое управление параллельным управлением.
Современные СУБД являются многопользовательскими системами, т.е. допускают параллельную одновременную работу большого количества пользователей. При этом пользователи не должны мешать друг другу.
Если несколько пользователей одновременно обращаются к БД при отсутствии блокировок, возможны ошибки при одновременном использовании в их транзакциях одних и тех же данных. Проблемы с параллельным выполнением бывают следующие:
• потерянные или «скрытые» обновления;
• зависимость от незафиксированных данных («грязное чтение»);
• несогласованный анализ (неповторяемое чтение);
• чтение фантомов.
Потерянные обновления
Потерянные обновления появляются при выборе одной строки двумя или более транзакциями, которые затем обновляют эту строку на основе ее первоначального значения. Ни у одной из транзакций нет сведений о действиях, выполненных другими транзакциями. Поэтому последнее обновление записывается поверх обновлений, сделанных другими транзакциями, что приводит к потере данных.
Зависимость от незафиксированных данных («грязное чтение»)
Зависимость от незафиксированных данных возникает, когда вторая транзакция выбирает строку, которую в это время обновляет первая транзакция. Таким образом, вторая транзакция читает еще не зафиксированные данные, которые могут быть изменены первой транзакцией.
Несогласованный анализ (неповторяемое чтение)
Несогласованным анализом называется ситуация, когда вторая транзакция несколько раз обращается к той же строке, что и первая, однако от раза к разу данные меняются. Несогласованный анализ напоминает неподтвержденную зависимость тем, что первая транзакция изменяет данные, которые читает вторая транзакция. Однако при несогласованном анализе первая транзакция подтверждает изменение этих данных. Кроме того, при несогласованном анализе происходит многократное {двукратное или больше) чтение второй транзакцией одной и той же строки с разными данными (отсюда термин «неповторяемое чтение»).
Чтение фантомов
Так называется ситуация, когда строки из диапазона строк, читаемого во время транзакции, добавляются или удаляются. Первая операция чтения, исполняемая во время транзакции, показывает наличие в прочитанном диапазоне некоторой строки. Если другая транзакция удалит ее, то эта строка не будет обнаружена, когда диапазон будет прочитан в следующий раз. Аналогично, если другая транзакция добавляет в читаемый диапазон строку после первого чтения, эта строка обнаружится только при повторном чтении.
Параллельная работа
Когда множество пользователей одновременно пытаются модифицировать данные в БД, необходимо создать систему управления, которая защитила бы модификации, выполненные одним пользователем, от негативного воздействия модификаций, сделанных другими. Этот процесс называется управлением параллельным выполнением.
Существуют два типа управления параллельным выполнением.
• Пессимистическое управление параллельным выполнением. Система блокировок не разрешает пользователям выполнить модификации, влияющие на других пользователей. Если пользователь выполнил какое-либо действие, в результате которого установлена блокировка, то другим пользователям не удастся выполнять действия, конфликтующие с установленной блокировкой, пока владелец не освободит ее. Этот процесс называется пессимистическим управлением. Он используется главным образом в средах, где высока конкуренция за данные.
• Оптимистическое управление параллельным выполнением. При этом способе управления пользователи не блокируют данные при чтении. Во время обновления система следит, не изменил ли другой пользователь данные после их прочтения. Если другой пользователь модифицировал данные, генерируется ошибка. Как правило, получивший ошибку пользователь, откатывает транзакцию и повторяет операцию снова. Этот способ управления в основном используется в средах с низкой конкуренцией за данные.
SQL Server поддерживает различные механизмы оптимистического и пессимистического управления параллельным выполнением. Пользователю предоставляется право определить тип управления параллельным выполнением, установив уровень изоляции транзакции для соединения и параметры параллельного выполнения для курсоров. Эти атрибуты задают посредством операторов Transact-SQL или через свойства и атрибуты API БД; например ADO, OLE DB и ODBC.
Добавить комментарий