Sobes.tech
Middle

Kādi ir transakciju izolācijas veidi?

sobes.tech AI

Atbilde no AI

Transakciju izolācija nosaka, cik ļoti viena transakcija var redzēt citu paralēli izpildāmo transakciju starpposma izmaiņas.

SQL standarts definē četrus izolācijas līmeņus:

  1. Read Uncommitted (Nesaskaņoti dati): Zemākais līmenis. Transakcija var lasīt citas transakcijas nesaskaņotus izmaiņas ("netīrs" lasījums).
  2. Read Committed (Saskaņoti dati): Transakcija var lasīt tikai saskaņotus datus. Izvairās no "netīra" lasījuma.
  3. Repeatable Read (Atkārtojams lasījums): Transakcija garantē, ka dati, kurus tā ir lasījusi, nemainīsies atkārtoti lasot. Izvairās no "netīra" un "neatkārtojama" lasījuma. Var rasties "fantoši".
  4. Serializable (Sērijveida): Augstākais līmenis. Garantē, ka paralēlas transakcijas tiek izpildītas tā, it kā tās būtu izpildītas secīgi. Izvairās no visiem nevēlamajiem parādībām: "netīra" lasījuma, "neatkārtojama" lasījuma un "fantošu".

Nevēlamās parādības paralēli izpildot transakcijas:

  • Dirty Read (Netīrs lasījums): A transakcija lasa datus, kurus ir modificējusi B transakcija, bet vēl nav saskaņoti. Ja B atceļ izmaiņas, A strādā ar nepareiziem datiem.
  • Non-repeatable Read (Neatkārtojams lasījums): A lasa tos pašus datus divreiz, bet B starp lasījumiem maina šos datus. Rezultātā A saņem dažādas vērtības.
  • Phantom Read (Fantoši): A veic vaicājumu, kas atgriež rindu kopumu. B pievieno vai dzēš rindas, kas atbilst A vaicājuma kritērijiem. Atkārtoti veicot to pašu vaicājumu, A saņem citu rindu kopumu.

Izolācijas līmeņu nevēlamo parādību kopsavilkums:

Izolācijas līmenis Netīrs lasījums Neatkārtojams lasījums Fantoši
Read Uncommitted
Read Committed
Repeatable Read
Serializable

Izvēlētā izolācijas līmeņa ietekmē veiktspēju un programmas precizitāti. Jo augstāks līmenis, jo lielākas izmaksas.