Чтение онлайн

на главную - закладки

Жанры

Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Борри Хелен

Шрифт:

Транзакция consistency еще называется блокирующей транзакцией, потому что она блокирует доступ любых других транзакций чтения/записи к любым записям, к которым эта транзакция обращается, и к любым записям, зависящим от этих записей.

! ! !

ВНИМАНИЕ! Поскольку этот уровень потенциально блокирует часть базы данных для других пользователей, которым нужно выполнять изменения, SNAPSHOT TABLE STABILITY должен использоваться осторожно. Внимательно следите за размером применяемых наборов, воздействием на соединения, зависимые таблицы и особенно за длительностью такой транзакции.

. ! .

Способ

доступа

Способ доступа может быть READ WRITE (чтение/запись) или READ ONLY (только чтение). Транзакция READ WRITE может выбирать, добавлять, изменять и удалять данные. Транзакция READ ONLY может только выбирать данные.

Способом доступа по умолчанию является READ WRITE.

! ! !

СОВЕТ. Одним из преимуществ транзакции READ ONLY является ее способность выбирать записи для пользовательского интерфейса без использования большого объема ресурсов на сервере. Убедитесь, что ваши транзакции только для чтения сконфигурированы с уровнем изоляции READ COMMITTED, чтобы гарантировать, что сборка мусора на сервере будет выполняться, минуя эту транзакцию.

. ! .

Способ разрешения блокировок ("Режим блокировок")

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

WAIT

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

WAIT чаще всего не является предпочтительным способом блокировки для интерактивных систем с большим объемом данных, потому что он может замедлять работу пользователей и при некоторых условиях может приводить к тупикам (см. разд. "Что такое взаимная блокировка?").

Использование WAIT бессмысленно в изоляции SNAPSHOT. Если только блокирующая транзакция в итоге не выполнит откат- наименее вероятный сценарий- результатом ожидания, естественно, будет конфликт блокировки. В транзакции READ COMMITTED вероятность того, что результатом ожидания будет конфликт блокировки, весьма мала.

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

Когда вероятность столкновений транзакций высока, но транзакции короткие, WAIT является предпочтительным, потому что гарантирует, что ожидающие запросы будут обрабатываться в последовательности FIFO (First In First Out, первый пришел - первый ушел). При этом в пользовательских системах, где быстрые операции не гарантированы, транзакции WAIT противопоказаны, потому что потенциально задерживают сборку мусора.

NO WAIT

В

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

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

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

Firebird поддерживает режим блокировки таблиц для обеспечения полной блокировки одной или более таблиц в процессе выполнения транзакции. Необязательное предложение RESERVING <список таблиц> запрашивает немедленную полную блокировку всех подтвержденных строк указанных таблиц, предоставляя транзакции исключительный доступ за счет любых транзакций, конкурирующих с этой транзакцией.

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

Резервирование таблиц имеет три основные цели.

* Обеспечение блокировки таблиц на момент начала транзакции, а не в то время, когда к ним обращается первый оператор, что происходит в случае изоляции TABLE STABILITY, используемом для блокировки на уровне таблиц. Режим разрешения блокировки (WAIT/NOWAIT) применяется во время запроса транзакции, когда возникает конфликт с другими транзакциями, имеющими изменения данных, ожидающих завершения. В этом случае результатом будет обработка запроса при WAIT и отказ в обработке при NOWAIT. Такая возможность резервирования таблиц важна, потому что резко сокращает вероятность взаимных блокировок.

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

* Увеличение приоритета транзакции в отношении одной или более таблиц, с которыми она будет работать. Например, транзакция SNAPSHOT, которой нужен исключительный доступ по записи ко всем строкам какой-либо таблицы, может ее зарезервировать, оставляя обычным приоритет по отношению к строкам других таблиц. Это менее агрессивный способ применения блокировки на уровне таблицы, чем альтернативный, использующий уровень изоляции TABLE STABILITY.

В транзакции вы можете резервировать более одной таблицы.

Использование резервирования таблиц

Использование резервирования таблиц с уровнями изоляции SNAPSHOT и READ COMMITTED является более предпочтительным, чем с SNAPSHOT TABLE STABILITY, когда требуется блокировка на уровне таблицы. Резервирование таблиц является менее агрессивным и более гибким способом предварительной блокировки таблиц. Он доступен для использования с любым уровнем изоляции. При этом его использование с SNAPSHOT TABLE STABILITY не рекомендуется, поскольку он не имеет эффекта при ограничениях доступа к таблицам, к которым транзакции может понадобиться доступ и которые находятся за пределами предложения RESERVING.

Поделиться:
Популярные книги

Прогрессор поневоле

Распопов Дмитрий Викторович
2. Фараон
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прогрессор поневоле

Господин моих ночей (Дилогия)

Ардова Алиса
Маги Лагора
Любовные романы:
любовно-фантастические романы
6.14
рейтинг книги
Господин моих ночей (Дилогия)

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Авиатор: назад в СССР

Дорин Михаил
1. Авиатор
Фантастика:
попаданцы
альтернативная история
5.25
рейтинг книги
Авиатор: назад в СССР

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Барон Дубов 4

Карелин Сергей Витальевич
4. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов 4

Имперский Курьер. Том 3

Бо Вова
3. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 3

Бестужев. Служба Государевой Безопасности. Книга 5

Измайлов Сергей
5. Граф Бестужев
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга 5

Адвокат Империи 2

Карелин Сергей Витальевич
2. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 2

Баронесса. Эхо забытой цивилизации

Верескова Дарья
1. Проект «Фронтир Вита»
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Баронесса. Эхо забытой цивилизации

Адвокат Империи 7

Карелин Сергей Витальевич
7. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 7

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Крещение огнем

Сапковский Анджей
5. Ведьмак
Фантастика:
фэнтези
9.40
рейтинг книги
Крещение огнем

Невеста клана

Шах Ольга
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Невеста клана