Позволяет ли oracle вариант незафиксированного чтения? - PullRequest
14 голосов
/ 16 октября 2008

В db2 запрос с предложением 'with ur' позволяет запросу быть незафиксированным чтением, как и предложение with with nolock в mysql. Есть ли такая опция в oracle тоже ... Если нет, то почему?

Ответы [ 4 ]

17 голосов
/ 16 октября 2008

Том дает отличный ответ на этот вопрос: На уровнях изоляции транзакций

Он говорит:

ЧИТАТЬ БЕЗ КОММИТЕТА уровень изоляции позволяет грязное чтение. База данных Oracle не использует грязный читает и даже не позволяет им. Основная цель ЧИТАТЬ БЕЗ КОММИТЕТЫ уровень изоляции должен обеспечить основанное на стандартах определение, которое позволяет для неблокирующих чтений.

...

Теперь база данных, которая допускает грязный читать ... он не только возвращает неправильный ответ, но он также возвращает ... [ответ] ... которого никогда не было в таблице. В многопользовательской базе данных грязное чтение может быть опасной особенностью. Лично я никогда не видел Полезность этого ...

Дело в том, что грязное чтение не особенность; скорее это ответственность. В базе данных Oracle это просто не нужно. Вы получаете все Преимущества грязного чтения - нет блокировка - без каких-либо неправильных Результаты.

4 голосов
/ 16 октября 2008

Ответ Тома Кайта верен, оракул WRT, нет такого понятия, как «грязное чтение» из-за его архитектуры Multi-Version Concurrency Control (MVCC).

С точки зрения функциональности приложения я полностью согласен с Томом; нет веских причин или грязных чтений.

Зачем когда-либо использовать его за пределами Oracle? Там, где нет MVCC (например, MySQL, Ingres), это хитрость, чтобы обойти проблемы с блокировками, которые могут снизить производительность или привести к «разрядке» системы блокировки замков ", если не правильно настроен. Точно так же, как вам нужно настроить откат / отмену в Oracle, вам нужно управлять системой блокировки в базах данных не-MVCC.

Так почему это может быть полезно с Oracle - в качестве повышения производительности для функций только для чтения, где «неправильные данные» крайне маловероятны и крайне несущественны. В MySQL / DB2 / Ingres / Informix (не уверен насчет SQL Server / Sybase) его можно использовать для обхода средств управления блокировками для повышения производительности.

Вот пример ситуации, когда операции чтения не требуют согласованности:

  • Список всех продуктов

Вот пример ситуации, когда чтение нужно согласованность:

  • Список товаров на складе

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

1 голос
/ 07 февраля 2018

С обоснованием UR : Когда дело касается запроса SELECT ONLY (report), нет смысла ждать фиксации. Если вы сообщаете о таблице, которая обновляется, то неважно, получаете вы это обновление или нет. Грязное чтение так же верно, как и данные после фиксации. Подумайте, должен ли запрос попасть в эту заблокированную запись на секунду раньше.

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

Использование WITH UR и других эквивалентов СУБД обеспечивает повышение производительности, поскольку запросы не ожидают коммитов и не приводит к потере целостности данных.

(ps. Просто настройте мою учетную запись, чтобы я не мог комментировать другие ответы.)

0 голосов
/ 21 марта 2017

Хотя приведенные выше ответы являются действительно правильными, вы можете взглянуть на автономные транзакции, но имейте в виду, что они не рекомендуются, и вы можете посмотреть здесь Автономные транзакции и недостатки здесь Автономные транзакции - плохо понятая функция .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...