Milyen tranzakcióelzárási szintek léteznek?
sobes.tech MI
Válasz az MI-től
Az SQL-ben a tranzakciók izolációs szintjei meghatározzák, hogy egy tranzakció mennyire láthatja más tranzakciók által végrehajtott, még nem rögzített változtatásokat. Ezek célja a párhuzamos hozzáférési problémák megelőzése: piszkos olvasás, ismételhetetlen olvasás és fantomolvasás.
Négy szabványos izolációs szint létezik:
- READ UNCOMMITTED (Nem rögzített olvasás)
- A legalacsonyabb szint.
- A tranzakció láthatja más tranzakciók nem rögzített változtatásait (engedélyezi a piszkos olvasást).
- Nem akadályozza meg az ismételhetetlen olvasást és a fantomolvasást.
- READ COMMITTED (Rögzített olvasás)
- Megakadályozza a piszkos olvasást. A tranzakció csak azokat a változtatásokat látja, amelyek a kérés kezdete előtt vagy alatt rögzítve lettek.
- Engedélyezi az ismételhetetlen olvasást és a fantomolvasást.
- REPEATABLE READ (Ismételhető olvasás)
- Megakadályozza a piszkos és az ismételhetetlen olvasást. Ha egy tranzakció többször olvas egy sort, mindig ugyanazt az értéket látja, kivéve, ha maga változtatta meg.
- Engedélyezi a fantomolvasást (más tranzakciók új sorokat szúrhatnak be, amelyek láthatóvá válnak a tartományi lekérdezések ismételt végrehajtásakor).
- SERIALIZABLE (Sorrendbe állított)
- Minden párhuzamos hozzáférési problémát kiküszöböl: piszkos olvasás, ismételhetetlen olvasás és fantomolvasás.
- A tranzakciók úgy futnak, mintha egymás után, szigorúan sorban hajtódnának végre.
- A legmagasabb szint, de a leglassabb is, mivel több zárolást igényel.
Az egyes szinteken megelőzött problémák összehasonlító táblázata:
| Izolációs szint | Piszkos olvasás | Ismételhetetlen olvasás | Fantom olvasás |
|---|---|---|---|
| READ UNCOMMITTED | Nem | Nem | Nem |
| READ COMMITTED | Igen | Nem | Nem |
| REPEATABLE READ | Igen | Igen | Nem |
| SERIALIZABLE | Igen | Igen | Igen |
Az izolációs szint kiválasztása az alkalmazás adatkonzisztenciára és teljesítményigényére épül. Magasabb szintek nagyobb integritást biztosítanak, de csökkenthetik a párhuzamosságot.
Pythonban, adatbázisokkal való munkánál (pl. sqlite3, PostgreSQL psycopg2, MySQL mysql.connector) az izolációs szint általában a kapcsolat vagy kurzor megfelelő metódusával állítható be.
Példa az sqlite3 izolációs szint beállítására:
# Könyvtár importálása
import sqlite3
# Kapcsolódás az adatbázishoz
conn = sqlite3.connect('mydatabase.db', isolation_level='REPEATABLE READ')
# A 'REPEATABLE READ' helyett lehet None (hasonló a READ UNCOMMITTED-hez), 'DEFERRED', 'IMMEDIATE', 'EXCLUSIVE'
# Kurzor példány
cursor = conn.cursor()
# További adatbázis műveletek...
# Változtatások megerősítése
conn.commit()
# Kapcsolat lezárása
conn.close()
Példa a psycopg2-re:
# Könyvtár importálása
import psycopg2
# Izolációs szintek konstansainak importálása
from psycopg2.extensions import ISOLATION_LEVEL_READ_COMMITTED, ISOLATION_LEVEL_SERIALIZABLE
# Kapcsolódás az adatbázishoz
conn = psycopg2.connect(database="mydatabase", user="myuser", password="mypassword", host="localhost")
# Izolációs szint beállítása
conn.set_isolation_level(ISOLATION_LEVEL_SERIALIZABLE)
# Használható az ISOLATION_LEVEL_READ_UNCOMMITTED, ISOLATION_LEVEL_READ_COMMITTED, ISOLATION_LEVEL_REPEATABLE_READ, ISOLATION_LEVEL_SERIALIZABLE
# Kurzor példány
cursor = conn.cursor()
# További adatbázis műveletek...
# Változtatások megerősítése
conn.commit()
# Kapcsolat lezárása
conn.close()
A magasabb szintek nagyobb adat integritást biztosítanak, de csökkenthetik a párhuzamosságot.