Я пытаюсь выяснить, какой уровень изоляции (среди сериализуемых и зафиксированных при чтении) лучше в каких сценариях ... По ссылке http://download.oracle.com/docs/cd/B14117_01/server.101/b10743/consist.htm#i17894, Я шел по теме Выбор уровня изоляции ,Я получил некоторую ясность и некоторые вопросы, основанные на некоторых утверждениях в статье.
Satement : - Чтение фиксированной изоляции может обеспечить значительно больший параллелизм с несколько повышенным риском противоречивых результатов из-за фантомов инеповторяемые операции чтения для некоторых транзакций.
Вопрос1: - Как зафиксированная изоляция обеспечивает больше параллелизма, чем сериализуемого? Согласно моему пониманию сериализуемые транзакции также не ограничивают параллельные транзакции.
Заявление: - Все запросы в сериализуемой транзакции Oracle видят базу данных как единый момент времени
Вопрос: - Я думаю, что они имеют в виду здесь, когдаСериализуемая транзакция начинается, скажем, в момент времени t1, тогда все данные будут представлены дляm Состояние базы данных, которое было в момент времени t1. Верно? Не уверен, когда мы вызываем, транзакция фактически начинается. Это когда мы получаем соединение или когда запускается первый запрос?
Заявление: - Сериализуемая изоляция Oracle подходит для сред, где существует относительно низкая вероятность того, чтодве параллельные транзакции изменят одни и те же строки, а долгосрочные транзакции в основном предназначены только для чтения
Вопрос: - Скажем, две транзакции tran1 и tran2 начинаются в момент времени t1.Если tran1 обновляет строку row1 в момент времени t2, а позже в момент времени t3 выборки tran2 будет ли та же строка tran2, будет ли обновленная строка сделана с помощью tran1?(Я думаю, нет, потому что tran2 будет извлекать состояние данных, которые присутствовали в момент времени t1. Верно? )
Заявление: - Кодирование сериализуемых транзакций требует дополнительной работыразработчик приложения должен проверить на наличие ошибки «Cannot serialize access», отменить и повторить транзакцию.
Вопрос: - Не уверен, когда разработчик получит ошибку «Cannot serialize access». Получим ли мы ту же ошибку в следующем сценарии
Скажем, две транзакции tran1 и tran2 начинаются в момент времени t1.Если tran1 обновляет строку1 в момент времени t2, а позже в момент времени t3 tran2 обновляет ту же строку1.В этом случае будет выдано сообщение об ошибке «Не удается сериализовать доступ»? Если да, поддерживает ли oracle версию внутренне в случае сериализуемых транзакций, чтобы узнать, что строка была обновлена пользователем?