Поделиться через


Параллелизм

Параллелизм — это одновременный доступ нескольких пользователей к данным. Чем больше операций поддерживает компонент Database Engine, тем выше его параллелизм. В Microsoft SQL Server Compact с целью защиты данных управление параллелизмом выполняется с помощью блокировок. Блокировки контролируют возможность нескольких пользователей одновременно получать доступ к общим данным и изменять их, не вступая в конфликт. Дополнительные сведения см. в разделе Блокировки (SQL Server Compact).

Проблемы параллелизма

Неконтролируемое изменение и чтение данных несколькими пользователями может привести к проблемам параллелизма. Например, если несколько пользователей одновременно обращаются к базе данных, их транзакции могут выполнить операции с одними и теми же данными в одно и то же время. К числу проблем параллелизма, которые возникают при использовании SQL Server Compact, относятся следующие.

  • Потерянные обновления.

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

  • Непоследовательный анализ (неповторяющееся чтение).

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

  • Чтение фантомов.

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

Примечание

Одной из регулярных проблем параллелизма, которой не возникает в SQL Server Compact, является зависимость от незафиксированных данных ("грязное" чтение). Эта ошибка появляется, когда вторая транзакция выбирает строку, обновляемую другой транзакцией. Вторая транзакция, таким образом, считывает данные, которые еще не зафиксированы и могут быть изменены транзакцией, обновляющей строку. При использовании MicrosoftSQL Server можно выполнить операции «грязного» чтения. Дополнительные сведения о проблемах параллелизма см. в разделе «Эффекты параллелизма» в электронной документации SQL Server.

Управление параллелизмом

В сценарии с базой данных есть два механизма управления параллелизмом.

  • Управление с помощью оптимистического параллелизма.

    Управление с помощью оптимистического параллелизма выполняется исходя из предположения, что конфликты ресурсов между несколькими пользователями маловероятны, при этом исполнение транзакций разрешается без блокировки ресурсов. Ресурсы проверяются только когда транзакции предпринимают попытку изменить данные. Это позволяет определить, нет ли конфликта (например, с помощью проверки номера версии). В случае конфликта приложение должно прочитать данные и снова предпринять попытку внести изменение. Функция управления с помощью оптимистического параллелизма в продукт не заложена, однако ее можно встроить в приложение вручную, отслеживая доступ к базе данных.

  • Управление с помощью пессимистического параллелизма.

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

Дополнительные сведения об оптимистическом и пессимистическом параллелизме см. в разделе «Типы управления с помощью параллелизма» в электронной документации SQL Server.

Примечание

Некоторые сценарии 64-разрядных платформ не поддерживают одновременный доступ к файлу базы данных с SQL Server Compact более поздних версий. Дополнительные сведения о 64-разрядных версиях компонентов см. в разделе Управление 64-разрядными приложениями баз данных.

См. также

Основные понятия

Транзакции (SQL Server Compact)

Блокировки (SQL Server Compact)

Многопользовательский доступ