и для других уровней? Если для других, то для каких?
Всегда и для всех. О какой СУБД речь, кстати? ;)
А разве двухфазная блокировка защитит от фантомных данных?)
А например для Snapshot Isolation ведь не нужна 2PL. В 2pl если взят какой то lock на таблицу , то он ее не отпустит до завершения транзакции. А в SI такого нет. Прочитали данные из таблицы и перешли к другой таблице , например и на table1 уже никакой lock не держим . Выходит ,что 2PL только в serialuzable transaction используется
Ещё раз, о какой СУБД речь, конкретно? > А например для Snapshot Isolation ведь не нужна 2PL. Всё равно нужна — Вы забыли о DDL / schema locks (кажется, никто для этого "чисто" MVCC не использует). > Выходит ,что 2PL только в serialuzable transaction используется Выходит, что Вы непонятно о чём спрашиваете. ;) 2PL — это общий принцип, понимаете? И он (частично) нарушается в некоторых СУБД на некоторых уровнях изоляции.
Тегну вас еще)) А то Николай не видит)) двухвазная блокировка же не защищает от “фантомного чтения” (phantom reads), которого нет в SERIALIZABLE, значит двухфазная блокировка вполне применяться может для достижения REPEATABLE READ. Или я что-то путаю?
СУБД не важна. В 2PL блокировки все отпускаются только в конце транзакции. А в SI берется shared на таблицу только в момент чтения данных из нее и после сразуже отпускается. вот например, если есть 2 селекта внутри одной транзакции, то если это SI , то сначала взмется shared на одну таблицу. из нее прочитаются данные. блокировка отпустится. Дальше возмется блокировка на 2ю таблицу и считается данные из нее . после этого shared блокировка сразу отпустится. А если это 2PL, то блокировка shared даже на первую таблицу будет держатся, когда из нее уже все прочитали. Согласны?
Защищает, если блокировать то, что нужно. Да, Вы что-то с чем-то путаете. ;) 2PL — это просто принцип, т.е. в первой фазе блокировки только накладываются, во второй — только отпускаются.
Ну да, но вы не можете заблокировать данные, которых еще в этой транзакции не запросили 😅 А значит не защищает))
> СУБД не важна. А, т.е. Вы ответа на свой вопрос не знаете, но уже откуда-то знаете, что СУБД не важна? ;) > А в SI берется shared на таблицу только в момент чтения данных из нее и после сразуже отпускается. В PostgreSQL (MVCC), например (раз "СУБД не важна") никакого shared lock на данные не берётся. А вот lock на таблицу сохраняется до конца транзакции. > Согласны? Нет, не согласен. И факты не согласны. Более того, в упомянутом PostgreSQL никаких "обычных" блокировок SERIALIZABLE по сравнению с другими уровнями не добавляет. И, кстати, RR не берёт никаких дополнительных блокировок по сравнению с RC.
Странно, а всех защищает. ;) Откройте любой учебник или документацию любой СУБД-"блокировочника".
Two phase commit может?
2PC - это для респределенных транзакций. ОН скорее для A в ACID, а не для I
Илья, наверное, имел в виду — может, Вы вообще не о том спросили (нередко путают, просто потому, что названия похожие). ;)
а я то подумал, что Илья напутал )
Я ж просто спросил.. Про это two phase locking вообще очень мало кто знает
Надеюсь, что вас не обидел своим предположением. Если что, извините.
Обсуждают сегодня