2013-05-05 2 views
0

что произошло, если последовательность была доступна одновременно (даже в миллисекундах) несколькими пользователями. Будет ли это мертвый замок или Oracle иметь какой-то механизм?как последовательность поддерживает параллелизм в oracle

Я имею в виду, если пользователи A и B запросили у nextval от squence1 в то же время, они приобретут такое же значение или повесят.

Согласно this blog, это говорит

Параллельный доступ NEXTVAL на последовательности всегда будет возвращать отдельные значения для каждого абонента. (Если последовательность не была настроена для цикла значений - в этом случае возможны повторяющиеся значения).

+0

Они ** гарантированы ** для генерации различных значений. Внутренне они защищены механизмом синхронизации памяти (который намного легче, чем блокировка на уровне базы данных) –

+0

, пожалуйста, проконсультируйтесь с некоторыми примерами. Я действительно ценю – Ravi

+0

Извините, у меня нет исходного кода Oracle, поэтому я не могу приведите пример. Вам просто нужно доверять руководству здесь (и тому, что это работает уже более 30 лет). Возможно, вам захочется прочитать книгу Тома Ките «Экспертная база данных Oracle Database», в которой подробно описываются различные стратегии синхронизации. –

ответ

5

Джонатан Льюис охватывает это в своей книге Oracle Core (стр.222-225). Я не собираюсь повторять все, вы должны купить книгу (find it here). Важно то, что он не только объясняет, что происходит, он показывает нам, как мы можем видеть, что происходит (используя SQL-трассировку).

В принципе, каждая последовательность представляет собой только строку в основной таблице seq$. Первый вызов nextval выдает обновление для записи этой последовательности. Это увеличивает пороговую отметку последовательности до начального значения + значение кеша. База данных отслеживает текущее значение (начальное значение + количество вызовов до nextval) в SGA; когда это число достигнет отметки в воде, обновите базу данных seq$.

Важно отметить, что все это управлялось в SGA, а не отдельной сессии. Единственное, что отдельные дорожки сеанса являются результатом последнего вызова nextval, поэтому он может удовлетворить последующие вызовы currval.

Смежные вопросы