Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

* неповторяемое чтение (Non-repeatable read): появляется, если последующие чтения набора строк в рамках этой же транзакции могут отличаться от того, что было прочитано транзакцией в начале ее работы;

* фантомные строки (Phantom rows): появляется, если последующий набор строк, прочитанный транзакцией, отличается от набора, который был прочитан в начале работы транзакции. Фантомные явления появляются, если при последующем чтении появляются новые добавленные строки и/или исчезают удаленные строки, которые были подтверждены с момента первого чтения.

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

READ UNCOMMITTED вовсе не поддерживается в Firebird, READ COMMITTED соответствует стандарту. На двух следующих уровнях этого уровня изоляции природа многоверсионной архитектуры превалирует над ограничениями двухфазной блокировки, предлагаемой стандартом. Отображение указанных в стандарте уровней REPEATABLE READ и SERIALIZABLE невозможно.

Таблица 26.1. Уровни изоляции и управление феноменами в стандарте SQL

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

"Грязное"чтение

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

Фантомы

READ UNCOMMITTED

Допустимо

Допустимо

Допустимо

READ COMMITTED

Недопустимо

Допустимо

Допустимо

REPEATABLE READ

Недопустимо

Недопустимо

Допустимо

SERIALIZABLE

Недопустимо

Недопустимо

Недопустимо

READ COMMITTED

Самым низким уровнем изоляции является READ COMMITTED. Только на этом уровне изоляции вид состояния базы данных, измененного в процессе выполнения транзакции, изменяется каждый раз, когда подтверждаются версии записей. Вновь подтвержденная версия записи заменяет ту версию, которая была видна при старте транзакции. Подтвержденные добавления, выполненные после старта транзакции, становятся видимыми для нее.

Уровень изоляции READ COMMITTED обеспечивает неповторяемое чтение и не избавляет от феномена фантомных строк. Это наиболее полезный уровень для операций реального времени над большим объемом данных, т. к. сокращается количество конфликтов данных, однако он не является подходящим для задач, которым нужен воспроизводимый вид.

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

* При установке RECORD_VERSION (флаг по умолчанию) сервер позволяет транзакции читать самую последнюю подтвержденную версию записи. Если транзакция имеет режим READ WRITE (чтение/запись), то она будет способна перезаписывать самую последнюю подтвержденную версию записи, если ее идентификатор (TID) более поздний, чем идентификатор транзакции, подтвердившей самую последнюю версию записи.

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

• При задании WAIT транзакция будет ждать, когда другая транзакция либо подтвердит, либо отменит свои изменения. Эти изменения затем станут доступными, если другая транзакция их отменит или если идентификатор транзакции более поздний, чем идентификатор другой транзакции. Транзакция будет завершена аварийно по конфликту блокировки, если идентификатор другой транзакции будет более поздним.

При задании NOWAIT транзакция немедленно получит сообщение о конфликте блокировки.

! ! !

ПРИМЕЧАНИЕ. Транзакция READ COMMITTED может видеть все последние подтвержденные версии, которые позволяют читать установки этой транзакции, что подходит для операций добавления, изменения, удаления и выполнения. При этом любые выходные наборы, полученные в транзакции по оператору SELECT, должны получать измененный вид базы данных.

. ! .

SNAPSHOT (параллельность)

"Средним" уровнем изоляции является SNAPSHOT, альтернативно называемый Repeatabie Read (повторяемое чтение) или concurrency (параллельность). При этом изоляция SNAPSHOT В Firebird не является в точности соответствующей уровню Repeatabie Read, как он определен в стандарте. Он изолирует вид базы данных для транзакции изменениями на уровне строк только для существующих строк. При этом, поскольку по своей природе многоверсионная архитектура полностью изолирует транзакции SNAPSHOT от новых строк, подтвержденных другими транзакциями, не предоставляя транзакциям SNAPSHOT доступ к глобальному образу состояния транзакций (TSB, см. главу 25), транзакции SNAPSHOT не могут видеть фантомные строки. Следовательно, транзакции SNAPSHOT В Firebird предоставляют более глубокий уровень изоляции, чем REPEATABLE READ В SQL.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных