Middle
Kokie yra transakcijų izoliacijos tipai?
sobes.tech AI
Atsakymas iš AI
Transakcijų izoliacija nustato, kiek viena transakcija gali matyti kitų vykdomų paralelinių transakcijų tarpusavio pakeitimus.
SQL standartas apibrėžia keturis izoliacijos lygius:
- Read Uncommitted (Nesukonfigūruoti duomenys): Žemiausias lygis. Transakcija gali skaityti kitų transakcijų nepatvirtintus pakeitimus ("šiukšlinas" skaitymas).
- Read Committed (Patvirtinti duomenys): Transakcija gali skaityti tik patvirtintus duomenis. Vengia "šiukšlinio" skaitymo.
- Repeatable Read (Pakartotinas skaitymas): Transakcija garantuoja, kad duomenys, kurie buvo perskaityti, nesikeis pakartotinai skaitydama. Vengia "šiukšlinio" ir "nepakartojamo" skaitymo. Gali būti "fantomai".
- Serializable (Serijiniai): Aukščiausias izoliacijos lygis. Garantuoja, kad paralelinės transakcijos vykdomos taip, tarsi jos būtų vykdytos sekos tvarka. Vengia visų nepageidaujamų reiškinių: "šiukšlinio" skaitymo, "nepakartojamo" skaitymo ir "fantomų".
Nepageidaujami reiškiniai vykdant paralelines transakcijas:
- Dirty Read (Šiukšlinas skaitymas): A transakcija skaito duomenis, kurie buvo pakeisti B transakcijos, bet dar nėra patvirtinti. Jei B atšauks pakeitimus, A dirbs su neteisingais duomenimis.
- Non-repeatable Read (Nepakartojamas skaitymas): A skaito tuos pačius duomenis du kartus, bet B pakeičia juos tarp skaitymų. Dėl to A gauna skirtingas reikšmes.
- Phantom Read (Fantomai): A vykdo užklausą, kuri grąžina eilučių rinkinį. B prideda arba pašalina eilutes, atitinkančias A užklausos kriterijus. Pakartotinai vykdant tą pačią užklausą, A gauna kitą eilutų rinkinį.
Izoliacijos lygių nepageidaujamų reiškinių santrauka:
| Izoliacijos lygis | Šiukšlinas skaitymas | Nepakartojamas skaitymas | Fantomai |
|---|---|---|---|
| Read Uncommitted | Taip | Taip | Taip |
| Read Committed | Ne | Taip | Taip |
| Repeatable Read | Ne | Ne | Taip |
| Serializable | Ne | Ne | Ne |
Pasirinktas izoliacijos lygis veikia našumą ir programos tikslumą. Kuo aukštesnis lygis, tuo didesnės išlaidos.