Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / Lfg / Алгоритмы совместного доступа к базам данных.doc
Скачиваний:
59
Добавлен:
16.04.2013
Размер:
124.93 Кб
Скачать

Уровни изоляции

Для того чтобы обеспечить предсказуемость функционирования различных приложений, работающих в многопользовательских системах баз данных, стандарт ANSI/ISOдляSQLустанавливает различные уровни изоляции для операций, выполняемых над базами данных. Уровень изоляции(isolation level)транзакции определяет, могут ли операторы транзакции видеть результаты других одновременно выполняемых незавершенных и/или завершенных транзакций. Например, если выполнить в транзакции один и тот же запрос дважды, то уровень изоляции определит, будет ли в результате выполнения каждого запроса возвращаться одинаковое результирующее множество данных и стоит ли игнорировать результаты других незавершенных и/или завершенных транзакций. В таблице 1 показано, как одна из транзакций может влиять на коррект­ность результатов выполнения другой в многопользовательской среде.

Таблица 1. Уровни изоляции точно устанавливают способ воздействия параллельных транзакций друг на друга в многопользовательской среде

Транзакция 1

Транзакция 2

SELЕСТ * FROM sales.orders;

ID CUST_ID ORDER_DATE SHIP_DATE PAID_DATE S

-- ------- ---------- --------- --------- -

1 1 21 OCT 97 F

INSERT INTO sales.orders

VALUES (2,8,SYSDATE,NULL,NULL,'F’);

SELЕСТ * FROM sales.orders;

ID CUST_ID ORDER_DATE SHIP_DATE PAID_DATE S

-- ------- ---------- --------- --------- -

1 1 21 OCT 97 F

2 8 21 OCT 97 F

. . .

. . .

В таблице 1 транзакция 1 видит результаты транзакции 2, хотя транзакция 2 еще не завершена. Точнее говоря, во время второго выполнения запроса транзакции 1 виден фантом, введенный транзакцией 2.

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

Таблица 2. Уровни изоляции ANSI/ISOопределяют, в какой степени параллельные транзакции будут влиять друг на друга в многопользовательской системе баз данных

Уровень изоляции

Черновое чтение

Неповторяемое чтение

Фан­томы

Read Uncommitted (чтение незавершенных транзакций)

٧

٧

٧

Read Committed (чтение завершенных транзакций)

x

٧

٧

Repeatable Read (повторяемое чтение)

x

х

٧

Serializable (последовательное чтение)

x

x

х

По умолчанию при выполнении транзакций используется уровень изоляции ReadCommitted(чтение завершенных транзакций). При необходимости можно начать выполнение транзакции, явно указав уро­вень изоляцииSerializable(последовательное чтение).

-- начало транзакции с уровнем изоляции Serializable

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

... другие операторы транзакции ...

COMMIT;

-- начало транзакции с уровнем изоляции Read Committed

SET TRANSACTION