Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Механизм выделения версий данных



Использование блокировок гарантирует сериальность плана выполнения смеси выполнения транзакций за счет общего замедления работы, так как конфликтующие транзакции ожидают когда транзакция первой заблокировавшая некий объект не освободит его. Без блокировок не обойтись если все транзакции изменяют данные. Но, если в смеси транзакции присутствуют как транзакция, изменяющая данные, так и только читающая данные, можно применить альтернативный механизм обеспечения сериальности, свободный от недостатков методов блокировок. Этот метод состоит в том, что транзакциям, читающим данные, предоставляется как бы своя версия данных, имевшаяся в момент начала читающей транзакции. При этом транзакция не накладывает блокировок на читаемые данные и поэтому не блокирует другие транзакции. Такой механизм называется механизмом выделения версий и заключается в использовании журнала транзакций для генерации разных версий данных. Журнал транзакций предназначен для выполнения операции отката при неуспешном выполнении транзакции или для восстановления данных после сбоя системы. Журнал транзакций содержит старые копии данных, измененных транзакциями. Суть метода состоит в следующем:

1) Для каждой транзакции или запроса запоминается текущий системный номер (SCN – System Current Number). Чем позже начата транзакция, тем больше ее SCN.

2) При записи страниц данных на диск фиксируется SCN транзакции, производящей эту запись. Этот SCN становится текущим системным номером страницы данных.

3) Транзакции, только читающие базы данных не блокируют ничего в базе данных.

4) SCN транзакции А сравнивается с SCN читаемой страницы данных

5) Если SCN страницы данных меньше или равен SCN транзакции А то транзакция А читает эту страницу.

6) Если SCN страницы данных больше SCN транзакции А то это означает, что некоторая транзакция В, начавшаяся позже транзакции А успела изменить или изменяет данные страницы. В этом случае транзакция А просматривает журнал транзакций назад в поиске первой записи по изменению нужной страницы данных с SCN меньше чем SCN транзакции А. Найдя такую запись, транзакция А использует старый вариант данных страницы.

Длинная транзакция выполняет некоторый анализ по всей таблице. Например, подсчитывает общую сумму денег на слетах клиентов банка. Пусть на всех счетах находится 100 $. Короткая транзакция в этот момент переводит 50 $ с одного счета на другой так что общая сумма по всем счетам не меняется.



 

Транзакция А Время Транзакция В
Проверка SCN счета p1 –SCN транзакции больше SCN счета чтение p1 = 100 без наложения блокировки и суммирование SUM = 100 t1  
  t2 Х-блокировка счета р3 – успешно.
  t3 Снятие денег со счета р3 -
  t4 Х-блокировка счета р1. успешно
  t5 Помещение денег на счета р1. 100→150
  t6 Фиксация транзакции. Снятие блокировки
Проверка SCN счета р2. SCN транзакции больше SCN счета. Разрешается чтение счета р2 = 100 без наложения блокировки. t7  
Проверка SCN счета р3. SCN транзакции меньше SCN счета. Чтение старого варианта счета р3. Р3 = 100. Суммирование SUM = 300 t8  
Фиксация транзакции t9  

Сумма на счетах посчитана верно.

Результат: транзакция А, начавшаяся первой не тормозит конкурирующую транзакцию В. При обнаружении конфликта (чтение транзакцией А измененного счета) транзакции А предоставляется своя версия данных, которая была на момент начала транзакции А.

23. Теорема несварения Есварана о сериализуемости и уровни изоляции.
Концепция способности упорядочиванию была впервые предложена Есвараном. В ней был сформулирован протокол двухфазной блокировки.

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

2) После снятия блокировки транзакция не должна накладывать никаких других блокировок.

Транзакции, используемые в этом протоколе, не различаются по типам и считаются монопольными. Описанные ранее протоколы доступа к данным с использованием S и X блокировок и протокол преднамеренных блокировок является модификациями протоколов двухфазной блокировки для случая, когда блокировки имеют различные типы.



Есвараном была сформулирована теорема: «Если все транзакции в смеси подчиняются протоколу двухфазной блокировки, то для всех чередующихся графиков запуска существует возможность упорядочивания» протокол называется двухфазным, так как он характеризуется двумя фазами:

1) Нарастание блокировок – во время этой фазы накладываются блокировки, и производится работа с заблокированными объектами.

2) Снятие блокировок – во время этой фазы блокировки только снимаются. Работа с ранее заблокированными данными может продолжаться.

Работа транзакции может выглядеть:

                     
   
   
 
   
 
   
   
 
 
 
 

 

 


А и В – объекты, с которыми работают транзакции.

                                 
   
     
 
 
   
   
       
 
 
     
 
 
 
   
 

 

 


Если транзакция не подчиняется протоколу двухфазной блокировки, то она выглядит так:

 

 


На практике, как правило, вторая фаза сводится к одной операции (завершение транзакции или откат) с одновременным снятием всех блокировок.

Реализация изолированности

Стандарт SQL не предусматривает уровней изоляции. Этот подход обеспечивает необходимые требования к изолированности транзакций, оставляя возможность производителя различных СУБД реализовывать эти требования своими способами (блокировок или выделения версий данных)

Стандарт SQL предусматривает четыре уровня изоляции:

1) Read Uncommitted

2) Read committed

3) Repeatable Read

4) Serialize able

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

· Неаккуратное считывание

· Неповторяемое считывание

· Фантомность

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

Различные уровни изоляции определяются по возможности или исключению этих особых случаев нарушения способности к упорядочиванию.

Уровень изоляции Неаккуратное считывание Неповторяемое считывание фантомный
Read Uncommitted да да Да
Read committed нет Да да
Repeatable Read нет нет да
Serialize able нет нет нет


24. Виды восстановления данных и индивидуальный откат транзакции.
Главное требование к долговечности данных транзакции состоит в том, что данные зафиксированных транзакций должны сохраняться в системе даже если в следующий момент произойдет сбой системы. Казалось бы, самый простой способ обеспечить такую гарантию – это во время каждой операции сразу записывать все изменения на дисковые носители. Такой способ не является удовлетворительным так как имеется существенное различие в скорости работы с оперативной и с внешней памятью. Единственный способ достичь приемлемой скорости работы состоит в буферизации страниц базы данных в оперативной памяти. Это означает, что данные попадают во внешнюю долговременную память не сразу после внесения изменений, а через некоторое довольно большое время. Тем не менее, что-то во внешней памяти должно оставаться так как иначе неоткуда получить информацию для восстановления. Требование атомарности транзакции утверждает, что незаконченные или откатившиеся транзакции не должны оставлять следов в базе данных. Это означает, что данные должны храниться в базе данных с избыточностью, позволяющей иметь информацию, по которой восстанавливается состояние базы данных на момент начала неудачной транзакции. Такую избыточность обычно обеспечивает журнал транзакций. Журнал транзакций содержит детали всех операций модификаций данных в базе данных, в частности, старое и новое значение модифицированного объекта.

Виды восстановления данных

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

1) Индивидуальный откат транзакции. Откат индивидуальной транзакции может быть инициирован либо самой транзакцией путем подачи команды или системой. СУБД может инициировать откат транзакции в случае возникновения какой-либо ошибки в работе транзакции или если эта транзакция выбрана в качестве жертвы при разрешении тупика.

2) Мягкий сбой системы. Он характеризуется утратой оперативной памяти системы. При этом поражаются все выполняющиеся в момент сбоя транзакции, теряется содержимое всех буферов базы данных. Данные, хранящиеся на диске, остаются неповрежденными.

3) Жесткий сбой системы. Аварийный отказ аппаратуры. Он характеризуется повреждением внешних носителей данных

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

Как из страницы базы данных данные из журнала транзакций не записываются сразу на диск, а предварительно буферизируются в ОЗУ. Таким образом, система поддерживает два вида буферов:

1) Буферы страниц базы данных

2) Буферы журнала транзакций

Страницы базы данных, содержимое которых в буфере отличаются от содержимого на диске, называются «грязными» страницами. Система постоянно поддерживает список грязных страниц. Запись грязных страниц из буфера на диск, называется выталкиванием страниц во внешнюю память. Очевидно, необходимо предусмотреть такие правила выталкивания буферов базы данных и буферов журналатранзакций, которые обеспечивали бы 2 требования:

1) Максимальная скорость выполнения транзакции. Для этого необходимо выталкивать страницы как можно реже. В идеале, если ОЗУ была бы бесконечна и сбои никогда бы не происходили, наилучшим выходом была бы загрузка всей базы данных в ОЗУ. Работа с данными только в ОЗУ и запись измененных страниц на диск только в момент завершения работы всей системы

2) Гарантия того, что при возникновении сбоя данные завершенной транзакции можно было бы восстановить, а данные незавершенной транзакции бесследно удалить, то есть обеспечение восстановления последнего согласованного состояния базы данных. Для этого что-то выталкивать на диск все-таки необходимо, даже если мы обладали бы бесконечной ОЗУ.

Таким образом, имеется две причины для периодического восстановления страниц во внешнюю память – недостаток ОЗУ и возможность сбоев. Основным принципом согласованной политики выталкивания буфера журнала и буфера страниц базы данных является то, что запись об изменении объекта базы данных должна попадать во внешнюю память журнала раньше, чем изменение объекта оказывается во внешней памяти базы данных. Соответственно, протокол журнализации называется Write Ahead Log (WAL) и состоит в том, что если требуется вытолкнуть во внешнюю память измененный объект базы данных, то перед этим нужно гарантировать выталкивание во внешнюю память журнала записей о его изменении. Это означает, что если во внешней памяти базы данных содержится объект, к которому применена некоторая команда модификации, то во внешней памяти журнала транзакций содержится запись об этой операции. Обратное неверно. То есть, если во внешней памяти журнала содержится запись о некотором изменении объекта, то во внешней памяти базы данных может и не быть самого измененного объекта. Дополнительным условием на выталкивание буферов накладывается тем требованием, что каждая успешно завершенная транзакция должна быть реально зафиксирована во внешней памяти. Какой бы сбой ни произошел – система должна быть в состоянии восстановить состояние базы данных, содержащей результаты всех зафиксированных к моменту сбоя транзакций. Периодически или при наступлении определенного события (количество страниц в грязном списке превзошло определенный порог) система принимает так называемую контрольную точку. Принятие контрольной точки включает выталкивание во внешнюю память содержимого буферов базы данных и специальную физическую запись контрольной точки, которая представляет собой вписок всех осуществляемых в данный момент транзакций.

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


Эта страница нарушает авторские права

allrefrs.ru - 2019 год. Все права принадлежат их авторам!