vc wrote:Now, this is interesting. I'd readily admit that I may be completely wrong here but my recollection is that at least Sybase had claimed that strict 2PL is what its implementation was.
У меня опять появляется ощущение, что из-за вольностей с терминологией и аббревиатурами мы не понимаем, что мы обсуждаем. Поэтому давайте я попробую привести всё к общему знаменателю:
* 2PL - это 2 phase locking protocol, суть которого в том, что стратегия работы с блокировками состоит в друх фазах: фаза накопления блокировок и фаза освобождения блокировок. Фазы обязаны сделовать именно в этом порядке. Точка. Больше ничего 2PL не утверждает.
* Что конкретно блокировать и в каких случаях - это уже слегка другая история - но одно свойство протокола всегда остаётся в силе: вне зависимости от наличия или отсутствия предикатных блокировок, индексных блокировок, многоуровневых блокировок, блокировок диапазонов ключей, etc. суть 2PL всегда одна и таже - две чёткие фазы работы с блокировками строго следующие друг за другом - начало транзакции, накопление блокировок, затем освобождение блокировок и конец транзакции.
* Есть как минимум две разновидности 2PL протокола - Conservative a.k.a Static 2PL и Strict 2PL:
- Conservative/Static 2PL: все объекты, участвующие в транзакции известны заранее, поэтому все необходимые блокировки берутся сразу одним махом (первая фаза), затем делаются все необходимые манипуляции с данными, как только работа с каким-то подмножеством данных завершается (так как заранее всё известно, то мы точно знаем, что в этой транзакции это подмножествно данных никогда больше трогаться не будет), блокировки, ассоциированные с этим подможеством, могут быть немедленно освобождены (началась вторая фаза), к концу работы транзакции все блокировки постепенно освобождаются. Ни одна из известных мне популярных коммерческих SQL СУБД (включая Sybase) эту разновидность 2PL не использует и никогда не использовала.
- Strict 2PL: заранее ничего не известно, ни набор операций, ни множество объектов затронутых операциями, поэтому блокировки набираются по мере необходимости, и освобождаются только при явном конце транзакции. Все известные мне коммерческие SQL СУБД (включая Sybase) используют эту разновидность 2PL. Ещё раз специально оговариювась, разновидности 2PL не имеют отношения к тому, что конкретно блокируется - объекты, предикаты, ключи, диапазоны и пр. Суть протокола - две фазы работы с любыми блокировками.
Отсюда вопрос:
vc, когда Вы говорите S2PL - Вы что имеете в виду Static 2PL (это как я Вас понимал, но теперь уже сомневаюсь) или Strict 2PL? И почему Вы жёстко увязываете 2PL с тем, что блокируется?