- •Алгоритмы совместного доступа к базам данных
- •Конкуренция, параллельность и согласованность
- •Алгоритмы Oracle, обеспечивающие параллельность и согласованность
- •Транзакции и взаимовлияние
- •Потери изменений
- •Черновое чтение
- •Повторяемое и неповторяемое чтение
- •Уровни изоляции
- •Isolation level read committed;
- •Алгоритмы блокирования Oracle
- •Автоматическое и явное блокирование
- •Уровни блокировок
- •Разделяемые блокировки
- •Исключающие блокировки
- •Блокировки dml
- •Строчные блокировки
- •Табличные блокировки
- •In exclusive mode
- •Повышение блокировок
- •Запросы и блокирование
- •Блокировки ddl
- •Исключающие блокировки ddl
- •Разделяемые блокировки ddl
- •Блокировки синтаксического анализа
- •Внутренние фиксаторы
- •Многовариантность
- •Системный номер изменения
- •Неблокирующие запросы
- •Многовариантность и согласованность чтения на уровне транзакций
- •Ошибки "слишком старый моментальный снимок"
- •Автоматическое функционирование системы
Блокировки синтаксического анализа
Oracleиспользует разделяемый пул для кэширования SQL-операторов и программPL/SQL, прошедших этапы синтаксического анализа и оптимизации. Это уменьшает время реакции системы для пользователей, которые выполняют одно и то же приложение. Объект, кэшированный в разделяемом пуле, устанавливает блокировки синтаксического анализа для объектов базы данных, на которые ссылается. Блокировка синтаксического анализа (parselock) — это блокировкаDDLуникального типа, которая применяется для управления взаимосвязями между объектом, находящимся в разделяемом пуле, и объектами базы данных, на которые тот ссылается. Если транзакция изменяет или удаляет объект базы данных в то время, когда объект в разделяемом пуле удерживает блокировку синтаксического анализа для объекта базы, тоOracleделает объект, находящийся в разделяемом пуле, недействительным. Затем, когда приложение в следующий раз выполняет SQL-оператор или программуPL/SQL,Oracleзнает, что нужно повторить синтаксический анализ и оптимизацию оператора, чтобы учесть изменения, произошедшие с объектами базы данных, на которые производится ссылка.
Внутренние фиксаторы
Блокировки, используемые в Oracleдля упорядочения доступа к внутренним структурам системы, называются фиксаторами(latches).Например, перед тем как транзакция сможет записать информацию в буфер журнала повтора экземпляра базы данных, она должна установить фиксатор для этого кэша памяти.Oracleоптимизирует функционирование базы данных, гарантируя, что выполняемые над ней операции будут удерживать фиксаторы очень недолго. Это обеспечивает достаточно высокий уровень параллельности даже в тех средах, где функционируют ответственные приложения.
Многовариантность
Выше в этой части было рассказано об уровнях изоляции ANSI/ISO, характеризующих различную степень взаимовлияния параллельных транзакций. Уровень изоляции транзакции определяет, могут ли операторы транзакции видеть результаты других одновременно выполняемых незавершенных и завершенных транзакций. Например, если при использовании уровня изоляцииRepeatableReadвыполнить в транзакцииодин и тот же запрос дважды, то запросы будут возвращать одинаковые результирующие множества данных, а результаты других незавершенных и завершенных транзакций будут игнорироваться.
Вне зависимости от того, какой уровень изоляции установлен для транзакции, обычно требуется, чтобы множество данных, возвращаемое конкретным оператором, было согласованным. Другими словами, Oracleвозвращает информацию, которая согласована начиная с момента выдачи нового оператора. Независимо от длительности транзакцииOracleскрывает изменения внесенные незавершенными и завершенными транзакциями после начала выполнения оператора.
В Oracleэто можно сделать без использования блокировки данных, при помощи уникального алгоритма многовариантности(multiversioning).Используя сегменты отката,Oracleможет создать несколько вариантов информации базы данных для того, чтобы удовлетворить запросы параллельных SQL-операторов, в том числе комбинации запросов и операторовDML. Далее показано, как это происходит.