Как работает пессимистическая блокировка в базе данных, влияет ли уровень изоляции на это?

Я читал о механизме блокировки базы данных (пессимистический, оптимистичный),

сеанс 1:
t1: открытая транзакция:
t2: спящий режим (3 секунды)
t5: обновление пользовательского набора name = 'x', где id = 1

сеанс 2: t2: обновить набор пользователей name = 'y', где id = 1

Я сомневаюсь: 1. Что произойдет в момент времени t5 2. Имеет ли он какое-либо отношение к уровню изоляции? Если да, то каков будет поведение на разных уровнях изоляции. 3. Использует ли база данных (mysql, oracle) только пессимистическую блокировку?


person Nishat    schedule 26.03.2017    source источник


Ответы (1)


Я отвечу на ваши вопросы в обратном порядке, так как мне не придется повторять некоторые части.

  1. Поскольку оптимистическая блокировка означает, что записи, прочитанные в транзакции, не блокируются, оптимистические блокировки не могут быть реализованным. Вам не следует использовать термин optimistic lock, используйте вместо него optimistic concurrency control. Стратегия пессимистической блокировки включает в себя блокировки на уровне базы данных, которые реализуются всеми rdbms, использующими транзакции, включая mysql с innodb.

Mysql не имеет поддержки уровня базы данных для оптимистичного управления параллелизмом. Это не означает, что другие rdbms также не поддерживают OCC. Вам нужно проверить их руководства.

  1. Уровни изоляции не влияют на результат сценария, описанного в вопросе, поскольку там нет select, только 2 атомарных обновления и поле, указанное в предложении where, не обновляется.

Уровни изоляции в основном влияют на то, как данные считываются транзакциями, а не на то, как они могут их обновлять.

  1. Результат сценария, описанного в вопросе, зависит от того, какой сеанс выдает update первым и как долго эта транзакция открыта. Какой бы сеанс ни выполнял обновление первым, внесет изменения и установит монопольную блокировку записи индекса. Другая транзакция не сможет выполнить обновление до завершения первой транзакции. Если первая транзакция выполняется в течение долгого времени, тогда время ожидания второй может истечь, ожидая снятия блокировки.
person Shadow    schedule 27.03.2017