Sobes.tech
Middle

Koje su vrste izolacije transakcija?

sobes.tech АИ

Одговор од АИ

Изолација транзакција одређује колико једна транзакција може да види међупромене других паралелно извршавајућих транзација.

Стандард SQL дефинише четири нивоа изолације:

  1. Read Uncommitted (Читање необјављених података): Најнижи ниво. Транзакција може да чита необјављене промене других транзација (до "мрсног" читања).
  2. Read Committed (Читање објављених података): Транзакција може да чита само податке који су објављени од стране других транзација. Избегава "мрсно" читање.
  3. Repeatable Read (Понављајуће читање): Транзакција гарантује да подаци, прочитани током транзације, неће се променити при поновном читању. Избегава "мрсно" и "непоновљиво" читање. Могући су "фантоми".
  4. Serializable (Серилизовано): Највиши ниво изолације. Гарантује да паралелне транзације раде као да су извршене једна за другом. Избегава све врсте непожељних појава: "мрсно" читање, "непоновљиво" читање и "фантоми".

Непожељне појаве при паралелном извршавању транзација:

  • Dirty Read (Мрсно читање): Транзакција A чита податке модификоване од стране транзакције B, које још нису објављене. Ако транзакција B врати промене, транзакција A ће радити са нетачним подацима.
  • Non-repeatable Read (Непоновљиво читање): Транзакција A чита исте податке два пута, али између читања транзакција B мења те податке. Као резултат, транзакција A добија различите вредности при поновним читањима.
  • Phantom Read (Фантомско читање): Транзакција A извршава упит који враћа скуп редова. Транзакција B додаје или брише редове који одговарају критеријумима упита A. При поновном извршавању истог упита, транзакција A добија други скуп редова.

Сажета табела непожељних појава по нивоима изолације:

Ниво изолације Мрсно читање Непоновљиво читање Фантоми
Read Uncommitted Да Да Да
Read Committed Не Да Да
Repeatable Read Не Не Да
Serializable Не Не Не

Избор нивоа изолације утиче на перформансе и тачност рада апликације. Што је виши ниво изолације, то су већи трошкови.