Основные понятия реляционной модели данных. Потенциальные ключи отношений, страница 11

5.  Система управления параллелизмом. Данная система управляет параллельными запросами к БД.

ПОНЯТИЕ ТРАНЗАКЦИИ

Определение: транзакция определяет элементарную единицу работы, выполняемую некоторым приложением.

Пример:

Begin transaction

X=x-10

Y=y+10

Commit work

End transaction

ОТСЮДА

Каждая транзакция должна обладать следующими свойствами

1)  атомарность – данное свойство подразумевает то, что транзакция должна быть неделимой выполняемой единицей

2)  согласованность – данное свойство требует, чтобы при выполнении транзакции ни одно из ограничений целостности в базу данных не нарушалось.

3)  изолированность – это свойство требует, чтобы выполнение транзакции никаким образом не влияло на результаты выполнения других транзакций, которые могут выполняться параллельно.

4)  Устойчивость – это свойство требует, чтобы результат корректно выполненной транзакции не был потерян.

УПРАВЛЕНИЕ ПАРАЛЕЛИЗМОМ

Архитектура системы управления паралелизмом.

РИС.

Компоненты:  main memory buffer  планировщик, database/

Для корректного выполнения параллельных транзакций система управления паралелизмом должна решать следующие возможные проблемы:

1) проблема потери изменений. Предположим, что выполняются 2 одинаковые транзакции, выполняющие идентичные действия над некоторым объектом базы данных.

t1: Г(x), x=x+1, w(x)

t2: Г(x), x=x+1, w(x)

Каждая из транзакций выполняет действия над объектом х.

Transaction 1

bot  (начало транзакции)

Г1(x)

x = x+1

w1(x)

commit

Transaction 2

bot

Г2(x)

x = x+1

w2(x)

commit

Транзакции ничем не синхронизируются.

Предположим, что начальное значение х=2

При последовательном выполнении этих двух транзакции конечное знасение х должно = 4.

При параллельном выполнении (как на рисунке) конечное значение х = 3

2) dirty read

на примере предыдущих двух транхакций во второй происзодит грязное чтение.

3) несогласованное чтение.

16.04.02

1)  проблема фантомных изменений GHOST UPDATE

РАСМОтрим базу данных, содержащую 3 объекта X, Y, Z. Причем в этой базе данных налагается следующее ограничение целостности:

X+Y+Z = 1000

Предположим, что выполняется следующие 2 транзакции.

t1

bot

r1(x)

r1(y)

r1(z)

s = x+y+z

commit

t2

bot

r2(y)

y = y-100

r2(z)

z = z-100

w2(y)

w2(z)

commit

Транзакция t2 при своем выполнении не нарущает ограничение целостности и не изменяет общую сумму объектов x, y,z. Однако с транзакцией t1 переменная s, которой присваевается сумма x+y+z , получает значение 1100.

БЛОКИРОВКА

Механизм управления паралелизмом, используемый почти всеми коммерческими СУБД называется блокировкой. Этот механизм позволяет избежать проблем, рассмотренных выше.

Блокировка основывается на следующем простом принципе. Все операции чтоения и записи должны быть защищены посредством выполнения следующих трех примитивов:

1)  r_lock

2)  w_lock

3)  unlock

Во время выполнения операции чтения и записи должны выполняться следующие требования:

Каждая операция чтения должна начинаться с выполнения примитива r_lock и заканчиваться примитивом unlock. Блокировка подобного типа называется разделяемой потому, что более чем одна блокировка такого же типа может быть применена к одному и тому же объекту данных.

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