ALV00 wrote: ↑24 Apr 2021 19:00
Что значит консистентное?
базовое понятие, из ansi sql стандарта. оракл и прочие версионники без блокировок выдают читающему запросу слепок базы на момент старта запроса/транзакции, т.е. на единый момент времени, обеспечивая read consistency. устаревшие субд блокировочники так не могут
ALV00 wrote: ↑24 Apr 2021 19:00
Есть разные феномены: lost updates, dirty reads, nonrepeatable reads, phantoms. Первые два db2 CS лечит.
CS выдает неконсистентную кашу вместо данных. представь таблицу счетов с балансом клиента, CS scan вычитает кашу где все баласы на разный момент времени. если клиент1 перевел денег клиенту10, то CS scan может запросто вычитать баланс клиента1, еще до того как баланс уменьшился, а баланс клиента10 после того как увеличился. на выходе каша неконсистентная. что бы получить что-то консистентное db2 должен по мере чтения хотя бы shared блокировки оставлять, значит вынужден поднимать isolation level до RS,RR или serializable. а это за собой тянет тучу сложностей с конкурирующими транзакциями, которые теперь вынуждены ждать, а то и вовсе по deadlock вываливаться.
ALV00 wrote: ↑24 Apr 2021 19:00
С последним особенно тяжело бороться, в Оракле лечится только serializable уровнем.
в оракле 2 уровня изоляции. куда проще то ?
собственно на дворе 2021 год, оркловая модель победила. в postgres уже выкатили zheap таблицы в альфа версии, скоро postgres еще на хороший шаг будет ближе к оракловой модели.