Sobes.tech
Middle

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:

  1. 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.
  2. 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.
  3. 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).
  4. 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.