Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Уровни изолированности транзакций

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

InterBase имеет три уровня изолированности:

READ COMMITTED - Читать подтвержденные данные. Этот уровень изоляции позволяет транзакции видеть изменения, сделанные другими, транзакциями, если эти изменения были подтверждены. К примеру, стартовали транзакции Т1 и Т2. Обе они изменили запись. Однако Т1 не увидит изменений, сделанных Т2, пока та не подтвердит сделанных ей изменений (по Commit). Этот уровень изоляции считается самым низким, открытым, позволяя транзакции видеть "самые свежие" данные.

SNAPSHOT - Моментальный снимок данных. Это средний уровень изолированности. Он позволяет транзакции видеть только те данные, которые существовали в момент старта транзакции. Если другие заинтересованные транзакции изменили запись и подтвердили изменения, то SNAPSHOT - транзакция все равно не увидит этих изменений. Однако она не блокирует данные, с которыми работает.

SNAPSHOT TABLE STABILITY - еще более закрытый уровень изоляции. Транзакции такого уровня не только делают снимок данных, они также блокируют на запись те данные, с которыми работают. Пока такая транзакция не подтверждена, остальные транзакции гарантированно не смогут изменить эти данные. Кроме того, транзакция SNAPSHOT TABLE STABILITY просто не сможет получить доступ к таблице, если в настоящий момент другая транзакция изменяет в ней данные.

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

Таблица 24.1. Возможные параметры транзакций
Параметр Описание
Read Разрешается чтение данных.
Write Разрешается запись данных.
Wait При возникновении конфликта с другой транзакцией, текущая транзакция ожидает определенное время (по умолчанию, 10 сек.), прежде чем попытается решить этот конфликт.
NoWait При возникновении конфликта с другой транзакцией сразу генерируется ошибка.
Read_committed Rec_Version Read _committed позволяет читать подтвержденные изменения данных, сделанные другими транзакциями. Дополнительный параметр Rec_Version, кроме того, позволяет читать и неподтвержденные изменения.
Read_committed No_Rec_Vesion Read _committed позволяет читать подтвержденные изменения данных, сделанные другими транзакциями. Дополнительный параметр No_Rec_Version используется по умолчанию, и не позволяет читать неподтвержденные изменения.
Concurrency Создает уровень изоляции SNAPSHOT.
Consistency Создает уровень изоляции SNAPSHOT TABLE STABILITY

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

ReadWrite

Какие параметры устанавливать, решается для каждой конкретной задачи. Однако можно сделать такие рекомендации:

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

ReadRead_CommittedRec_VersionNoWait

Если транзакция используется для построения отчетов, то она также должна только читать данные, но только подтвержденные. При этом желательно сделать снимок данных, чтобы не зависеть от возможных изменений. Для подобной транзакции параметры удобней всего делать такими:

ReadConcurrencyNoWait

И, наконец, если транзакция предназначена для изменения данных в БД, то ей лучше задать более жесткие параметры, например:

WriteConcurrencyNoWait

 

<== предыдущая лекция | следующая лекция ==>
Как транзакция работает | 
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 501; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.153 сек.