Параллелизм при работе с данными
Механизм блокирования по умолчанию хорошо гранулирован и применяется на уровне строк. Разные транзакции могут обновлять различные строки одной таблицы, не влияя друг на друга. По умолчанию блокирование осуществляется на уровне строки, однако СУБД поддерживает ручные блокировки и на более высоких уровнях, если в них возникнет необходимость. Любая транзакция, которая попытается обновить строку в заблокированной таблице, будет вынуждена дождаться завершения транзакции, создавшей блокировку. EXCLUSIVE является самым строгим режимом блокирования.
Механизм автоматического блокирования обеспечивает параллельный доступ к данным для большинства приложений. Рекомендуется избегать применения ручных блокировок, особенно при разработке приложений. Неадекватное использование высоких уровней блокирования может негативно сказаться на производительности. Механизм обслуживания очереди Очередь запросов на блокировки обслуживается автоматически. После завершения транзакции, создавшей блокировку, следующий в очереди сеанс получает право на создание блокировки. Механизм обслуживания очереди отслеживает порядок, в котором поступали запросы на создание блокировок, а также запрашиваемые режимы блокировок. Сеанс, который уже создал блокировку, может создать запрос на преобразование блокировки, не переходя в конец очереди. Например, сеанс создал блокировку SHARE на уровне таблицы. Сеанс может создать запрос на преобразование блокировки SHARE в блокировку типа EXCLUSIVE. Если таблица еще не имеет блокировок типа EXCLUSIVE или SHARE, то сеансу, который создал блокировку SHARE, будет предоставлено право на создание блокировки EXCLUSIVE вне очереди. Примечание. Существует две категории участников очереди: участники без разделяемого владения и участники с разделяемым владением, которые не поднимают уровень блокировки. Участники второй категории известны как конверторы. Они всегда имеют более высокий приоритет, чем остальные участники очереди, даже если они ожидают меньшее количество времени.
Рис.5. Транзакции и данные отмены операций
Перед началом выполнения транзакции ей присваивается сегмент отмены операций. На протяжении всего жизненного цикла транзакции, перед изменением данных их исходные значения копируются в сегмент отмены операций. Узнать о том, каким транзакциям назначены какие сегменты отмены операций, можно с помощью динамического представления производительности V$TRANSACTION. Сегменты отмены операций являются специализированными сегментами, которые автоматически создаются экземпляром по мере необходимости для поддержки транзакций. Подобно остальным сегментам, сегменты отмены операций состоят из экстентов, которые, в свою очередь, состоят из блоков данных. Размер сегментов отмены операций изменяется автоматически согласно текущим потребностям.
Таким образом, сегменты отмены операций выступают циклическим буфером хранения для приписанных им транзакций. Транзакции будут заполнять экстенты сегментов отмены операций до своего завершения или пока не будет заполнено все доступное пространство. Если экстент заполнен и при этом требуется дополнительное пространство, транзакция попытается использовать следующий экстент сегмента. После заполнения всех экстентов транзакция или вернется к первому сегменту и начнет его повторно заполнять, или создаст запрос на выделение нового экстента в сегменте отмены операций.
Дата добавления: 2021-09-25; просмотров: 319;