П. Г. Демидова А. В. Зафиевский А. А. Короткин А. Н. Лататуев Базы данных Учебное пособие


Download 1.32 Mb.
Pdf ko'rish
bet80/94
Sana15.06.2023
Hajmi1.32 Mb.
#1487605
1   ...   76   77   78   79   80   81   82   83   ...   94
Bog'liq
Базы данных

6.5. Уровни изоляции 
Язык SQL предусматривает настройку взаимодействия транз-
акций, называемую уровнями изоляции. Мы уже отмечали, что 
свойство изолированности транзакции предусматривает такой ре-
жим работы, при котором результаты параллельного выполнения 
нескольких транзакций оказываются такими же, как и при после-
довательном их выполнении, причем в любом порядке. Этого мож-
но добиться, если каждая транзакция будет от начала до конца 
транзакции устанавливать исключительную блокировку на все тре-
буемые ей ресурсы. Понятно, что использование ресурсов будет 
при этом достаточно неэффективным и выигрыш от параллельной 
работы транзакций будет невелик. Поэтому в случае, когда некото-


130 
рые из ситуаций, описанных в п. 6.2, не являются значимыми
можно уменьшить степень изолированности транзакций друг от 
друга, уменьшив тем самым объем блокируемых ресурсов и 
повысив эффект от параллельного выполнения транзакций. 
Язык SQL предусматривает несколько уровней изоляции 
транзакций, ослабляющих требования к их взаимодействию. 
Понижение требований относится только к операциям чтения, 
так что выполнение модификации данных блокирует их в 
исключительном режиме. 
SERIALIZABLE – наиболее высокий уровень изоляции, обес-
печивающий те же результаты, что и при последовательном испол-
нении транзакций. В исключительном режиме блокируются все 
строки и диапазоны строк, которые читались или модифицирова-
лись в текущей транзакции. Кроме того, блокируется доступ этой 
транзакции к строкам и диапазонам строк, которые читались или 
модифицировались в других транзакциях. Этот уровень гаранти-
рует отсутствие всех нежелательных эффектов от взаимодействия 
транзакций, описанных в п. 6.2. По существу, только этот уровень 
изоляции обеспечивает классические свойства транзакций (ACID). 
REPEATABLE READ – несколько меньший по степени изо-
ляции уровень. На этом уровне блокируются (в исключительном 
режиме) строки (не диапазоны строк), использовавшиеся в 
запросах текущей транзакции, однако допускается вставка строк 
другими транзакциями, что может привести к появлению строк-
призраков (п. 6.2.4). Это, однако, допустимо, если в текущей 
транзакции не используются запросы со статистическими функ-
циями и подобные им. Также блокируется доступ текущей 
транзакции к строкам, которые читались или модифицировались 
другими транзакциями. 
Уровень READ COMMITTED (чтение с фиксацией) блоки-
рует (в исключительном режиме) строки, которые вставлялись
удалялись или модифицировались. Этот режим допускает 
неповторяющееся чтение и вставку «призраков», но блокирует 
преждевременное («грязное») чтение и потерянное обновление. 
Уровень READ UNCOMMITTED блокирует строки, которые 
вставлялись, удалялись или модифицировались, в неисключи-
тельном режиме и обеспечивает лишь отсутствие потерянных 
обновлений. 


131 
Команда, устанавливающая уровень изоляции, обычно 
выполняется в самом начале транзакции и имеет вид 
SET TRANSACTION ISOLATION LEVEL <уровень изоляции> 
Выбор наиболее подходящего данной транзакции уровня 
изоляции может значительно уменьшить периоды ожидания 
транзакций, вызванные блокировками. 

Download 1.32 Mb.

Do'stlaringiz bilan baham:
1   ...   76   77   78   79   80   81   82   83   ...   94




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling