Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_14.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
202.75 Кб
Скачать

Параметры транзакций

SQL – транзакции имеет два параметра – режим и уровень изоляции. Для установки значений параметров применяется SQL – оператор SET TRANSACTION:

SET TRANSACTION

Режим,

ISOLATION LEVEL уровень_изоляции;

Параметр «режим» может принимать два значения:

  • READ WRITE (чтение – запись) – это значение устанавливается по умолчанию;

  • READ ONLY (только чтение).

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

  • «грязное чтение» (dirty read) – чтение транзакцией записи, которая изменена другой транзакцией, но это изменение ещё не записано на диск;

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

  • фантомное чтение (phantom reads) - при повторном чтении данных одна и та же транзакция обнаруживает после предыдущего чтения новые строки данных, вставленные другой транзакцией;

В стандартах SQL установлены четыре уровня изоляции транзакции :

  • SERIALIZABLE ( последовательное выполнение или сериализуемость);

  • REPEATABLE READ ( повторяющееся чтение);

  • READ COMMITED (подтвержденное чтение) - значение уровня изоляции по умолчанию;

  • READ INCOMMITED (неподтвержденное чтение).

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

Самый низкий уровень изоляции транзакций – это уровень READ INCOMMITED (неподтвержденное чтение). В этом случае на выполнение определенной транзакции могут влиять как окончательные, так и промежуточные результаты других транзакций: «грязное чтение», невоспроизводимое чтение и фантомное чтение. Поэтому этот уровень используется относительно редко. Но он является самым быстрым.

В режиме READ COMMITED (подтвержденное чтение или завершенное чтение данных) транзакциям разрешается читать только подтвержденные данные. Этот уровень изоляции устраняет «грязное» чтение, но оставляет возможными невоспроизводимое чтение и фантомное.

Режим изоляции REPEATABLE READ (повторяющееся или воспроизводимое чтение). В этом режиме строки (записи) таблицы, к которым обращается определенная транзакция для записи или чтения, блокируются и до окончания её другая транзакция не может обратиться к тем же данным (записям). Но при этом уровне может проявляться фиктивное («фантомное») чтение. (“Фантом — образ чего-либо из прошлого (человек, существо, предмет) [Википедия] ”). Если в ходе одной транзакции исполняются два запроса на выборку, а между ними другая транзакция добавит в таблицу новую строку, эта строка станет «фантомом», т.к. она неожиданно появляется в ходе одной и той же транзакции. Это и есть суть проблемы фантомного чтения.

Наибольший уровень изоляции транзакций достигается при значении SERIALIZABLE (последовательное выполнение или сериализуемость). В этом случае различные транзакции будут полностью изолированы друг от друга и не могут влиять друг на друга. Пока не будет завершена начавшаяся транзакция, другая должна ожидать её завершения. Но это приводит к заметному снижению производительности системы. На любом уровне ниже SERIALIZABLE появляется риск нарушения целостности базы данных. Но на этот риск идут во имя повышения производительности. Для этого и используют соответствующие уровни изоляции.

По умолчанию в большинстве СУБД используется режим READ WRITE и уровень изоляции READ COMMITED. Если необходимо установить другие параметры транзакции, отличающиеся от значений по умолчанию, то в нужный момент следует применить команду SET TRANSACTION, например,

SET TRANSACTION

READ ONLY,

ISOLATION LEVEL SERIALIZABLE ;

С этого момента следующая транзакция будет иметь уже параметры режим READ ONLY и уровень изоляции SERIALIZABLE.