У каждого блока данных Oracle имеется область заголовка, в которой обычно хранятся (наряду с другими структурами) сведения о каталоге, в котором размещена таблица, каталог строки и слоты транзакций.
Слоты транзакций
используются транзакциями для того, чтобы идентифицировать самих себя в
блоке перед тем, как транзакции попытаются модифицировать одну или несколько строк в блоке. Эти слоты играют главную роль в методологии Oracle, которая используется для реализации блокировки уровня строки и обеспечения согласованных по чтению представлений данных.
Когда транзакции требуется модифицировать строки в блоке, она должна сначала "прописаться" в доступном слоте транзакции в области заголовка блока. Затем, основываясь на номере слота, использованного в блоке, устанавливается
байт блокировки для каждой строки, которую он модифицирует, чтобы указать
на то, что в настоящий момент эти строки блока модифицируются. Так, если транзакция прописывается в слот транзакции 2 в заголовке блока, байты блокировки для каждой модифицируемой строки блока (в области интересов этой
транзакции) получат числовое значение 2. Это облегчает другим запросам или транзакциям, посещающим тот же самый блок, определить, подвергается ли блок в данный момент каким-либо изменениям, и не блокированы ли те данные,
которые в настоящий момент собирается обновить эта транзакция, какими-либо другими транзакциями. Слоты транзакций и байты блокировки уровня строки являются основными компонентами, облегчающими блокировку на уровне строки и поддержку многоверсионной модели согласован-
ности по чтению Oracle. Мы обсудим эти вопросы более подробно в главе "Настройка конкуренции".
Параметр хранения уровня блока
ство слотов транзакций (а значит, и номера слотов), распределяемых для каждо-
го блока, что позволяет избежать затрат времени и ресурсов на динамическое
выделение слотов транзакций в области заголовка блока в исполнительном пе-
риоде. Значение по умолчанию параметра
дексов. Таким образом, когда вторая транзакция попытается модифицировать
данные в том же самом блоке (посредством операций вставки, обновления или
а первый слот транзакции в этот момент времени недоступен, будет
занято 24 байта из
головка блока. Если будет происходить часто, то оно может вызвать
initrans
конфигурирует начальное количе-ство слотов транзакций (а значит, и номера слотов), распределяемых для каждо-
го блока, что позволяет избежать затрат времени и ресурсов на динамическое
выделение слотов транзакций в области заголовка блока в исполнительном пе-
риоде. Значение по умолчанию параметра
initrans
равноЛ для таблиц и 2 для ин-дексов. Таким образом, когда вторая транзакция попытается модифицировать
данные в том же самом блоке (посредством операций вставки, обновления или
а первый слот транзакции в этот момент времени недоступен, будет
занято 24 байта из
pctfree для
размещения второго слота транзакции в области за-головка блока. Если будет происходить часто, то оно может вызвать
две проблемы:
Динамическое выделение слотов транзакций замедлит производительность транзакций, поскольку вместо того, чтобы просто модифицировать данные блока, им приходится включаться в задачи управления памятью на уровне блока.
Если для таблицы динамически выделяется большое число дополнительных транзакций, все предварительные вычисления pctfree для этой таблицы могут в конечном счете стать неверными,
поскольку позаимствованные из области pctfree 24 байта на каждый слот
не возвращаются даже после завершения транзакции.
Как упоминалось ранее, проактивное конфигурирование
initrans
для исключения конкуренции на уровне блока, производимое всякий раз, когда изменяется размер блока базы данных Oracle, не только желательно, но и настоятельно рекомендуется.< Предыдущая | Следующая > |
---|