Правильный уровень изоляции?

Предположим, что у меня есть хранимая процедура, которая вставляет информацию о новом заказе, отправленном покупателем. И эта хранимая процедура может использоваться одновременно многими разными пользователями.

Мой вопрос заключается в том, что «если у меня есть эти два варианта уровня изоляции (чтение зафиксировано и сериализуемый), какой уровень изоляции должен обрабатываться этой хранимой процедурой»?

Мне нужно полное обоснование, так как я застрял, какое решение лучше всего использовать.

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

С уважением.


person Aki    schedule 13.05.2020    source источник


Ответы (1)


Предположим, что у меня есть хранимая процедура, которая вставляет информацию о новом заказе, отправленном покупателем. И эта хранимая процедура может использоваться одновременно многими разными пользователями.

Поскольку вы делаете только вставки, транзакции не конфликтуют по своей природе. Итак, вам нужно прочитать зафиксированный уровень изоляции. Это уровень изоляции по умолчанию.

Из документации:

Чтение зафиксированного уровня изоляции

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

Сериализуемый уровень изоляции

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

Сериализуемая изоляция подходит для сред:

  • С большими базами данных и короткими транзакциями, которые обновляют только несколько строк

  • Когда вероятность того, что две одновременные транзакции изменят одни и те же строки, относительно мала.

  • Где относительно длительные транзакции в основном доступны только для чтения

person Lalit Kumar B    schedule 13.05.2020
comment
Но уровень изоляции read commited не может справиться с феноменом повторяющегося чтения, верно? Таким образом, если каждая транзакция обновляет общее количество заказов, то другие транзакции будут считывать незафиксированные данные, когда это происходит одновременно. - person Aki; 13.05.2020
comment
Прочтите это, автор Том Кайт blogs.oracle.com/oraclemagazine/on-transaction-isolation -уровни - person Lalit Kumar B; 13.05.2020