Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Уд.DOC
Скачиваний:
8
Добавлен:
27.10.2018
Размер:
1 Мб
Скачать
☆

13. Организация многопользовательского доступа

1. Организация параллельного доступа.

2. Разделение прав доступа.

Организация параллельного доступа.

При параллельном доступе одновременно генерируется несколько потоков транзакций. При неуправляемой последовательности операций будет нарушаться изолированность и возможно потеря целостности.

Изолированность – состояние работы, при котором пользователь не ощущает присутствия других лиц.

Основные варианты нарушений:

  • потеря изменений:

Т1

Т2

Состояние

ЧтА

А0

ЧтА

А0

ИзмА

А1

ИзмА

А2

[откат]

[А0]

ЧтА

А2 [А0]

Решение – запрет изменения данных, измененных другой транзакцией, до завершения этой транзакции.

  • чтение грязных данных:

Т1

Т2

Состояние

ЧтА

А0 B0

ЧтВ

B0 A0

ИзмА

А1 B0 – грязные данные

ЧтА

A1 B0

ЧтВ

A1 B0

ИзмВ

A1 B1

A,B – связанные данные. Так мы прочитаем неверные данные. Решение – запрет чтения данных, изменяемых другой транзакцией до ее завершения.

  • неповторяющееся чтение:

Т1

Т2

Состояние

ЧтА

A0

ЧтА

A0

ИзмА

A1

ЧтА

A1

Нарушение изолированности. Решение – запрет изменения данных, читаемых другой транзакцией до завершения транзакции:

Т1\Т2

W

R

W

а)

б)

R

в)

+

  • фантомная запись:

Т1

Т2

Чт {А}

Доб. в {A}

Чт {B}

{A} – набор данных.

Решение – полная блокировка набора данных, которые читаются.

Указанные 4 ситуации относятся к разным уровням изолированности. В СУБД реализуются 2-а или более уровня изолированности. В стандарте SQL-92 определены 4 уровня:

Запрет Чт

изм-ся

Запрет Изм

чит-ся

Запрет

доб-ия

read uncommitted

-

-

-

read committed

+

-

-

read repeatable

+

+

-

serializable

+

+

+

Реализуется исполнение транзакций с помощью следующих методов:

  1. последовательное исполнение – выполняется только одна транзакция, остальные ждут ее завершения; для ускорения следует разрешить любую работу с различными данными и одновременное чтение одних и тех же данных;

  2. метод синхронизационных захватов – используется несколько видов блокировок (обычно блокировка на чтение и блокировка на запись); если транзакции требуются данные и они свободны, то работаем; если заблокировано, то проверяем совместимость, при совместимости работаем, при несовместимости – ожидаем; для поддержки захватов используется двухфазный протокол синхронизации:

    1. 1 фаза – транзакция захватывает данные по мере обращения к ним:

    1. 2 фаза – одновременное освобождение всех данных по завершению транзакции.

При двухфазном протоколе возможна взаимная блокировка:

При наличии тупика, ожидание будет бесконечным, необходимо нестандартное разрешение. Конфликты блокировок решаются следующими методами:

  • полуавтоматический вариант: при обнаружении конфликта – запрос пользователю, пользователь принимает решение – ожидание или откат;

  • автоматический – при обнаружении конфликта после заданного ожидания – автооткат транзакции (первой);

  • анализ наличия тупика – автоматически определяется разрешимость конфликта, используется граф ожидания, в котором указаны транзакции и обрабатываемые объекты.

Тупику соответствует замкнутый цикл в графе.

Для обнаружения цикла используется редукция графа – поочередно выполняются два шага:

  • удаление дуг от неожидающих транзакций;

  • удаление дуг от свободных данных к транзакциям;

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

При высоком уровне интегрирования – большие затраты на ожидание. Для повышения быстродействия могут использоваться:

  • многоуровневое блокирование: для записи, ячейки, кучи записей, и т.д. или всей таблицы (обычно при мелкой блокировке – много меток, при высокой – большой кусок);

  • многоверсионная работа:

при записи из какой-либо транзакции, реагируем в соответствии с уровнем изолированности

  • оптимистические методы блокировки – конфликты редки, поэтому блокировку ставим только в момент записи.

3) Временные метки – транзакция при инициализации получает метку – это время начала. При обращении к данным, транзакция метит его своей меткой. При обнаружении конфликта, метки сравниваются. Более молодая транзакция откатывается.