Transaksjoner — ACID i praksis
Hvordan databasen gir alt-eller-ingenting selv når mange brukere kjører samtidig og strømmen plutselig går.
Hvorfor finnes transaksjoner?
Tenk deg en bankoverføring: «trekk 100 kr fra konto A, sett 100 kr inn på konto B». To skriveoperasjoner. Hvis maskinen krasjer mellom dem, har banken nettopp slettet 100 kr av kundens penger — og 100 kr fra balansen. To samtidige overføringer kan også havne i klinsj og ende i tull selv uten krasj.
En transaksjon er en logisk arbeidsenhet som binder slike steg sammen. Databasen lover fire ting — kjent som ACID:
Atomicity
Alt eller ingenting — enten gjøres alle stegene, eller ingen.
Consistency
Integritetskrav (PK, FK, CHECK) holder før og etter hver commit.
Isolation
To samtidige transaksjoner skal ikke se hverandre halvferdige.
Durability
Etter commit overlever resultatet enhver krasj.
Kartet over alt som skjer
Tre hovedmekanismer jobber sammen i bakgrunnen hver gang du skriver BEGIN; … COMMIT;. Hver av dem garanterer én eller flere bokstaver i ACID:
Tenk på lock manager som en trafikkdirigent (ingen kjører over hverandre — Isolation), og recovery manager + logg som en flyboksopptaker (vi kan alltid spole frem committed arbeid og spole tilbake løse arbeid — Atomicity + Durability). De jobber uavhengig, men deler buffer pool og disk.
Én transaksjon — tre kapittel-deler
Hver del av kapittelet adresserer ett trinn i transaksjonens liv. Følg pilen: 8A gir vokabularet, 8B viser hva som kan gå galt under samtidighet og hvordan låser fikser det, 8C viser hva som skjer når strømmen går.
Hovedkilde: transaksjoner.pdf + Bratsbergs kompendium kap. 15–18. Underkapitlene er lese-stier med figurer og quizzer underveis — ikke bare summert til slutt.
Tre forelesninger, tre spor
Hver underside er bygd opp progressivt: konsept → figur → eksempel → quiz. Følg dem i rekkefølge første gang.
Begrepene du møter igjen
Disse går igjen i alle tre delene. Trenger du å slå dem opp senere — det er her.
| Begrep | Forkortet | Hva det betyr |
|---|---|---|
| Transaksjon | Ti | Atomisk arbeidsenhet — ender med commit eller abort. |
| Schedule (historie) | H | Sekvens av r/w/c/a-operasjoner fra flere transaksjoner. |
| Conflict | — | To operasjoner på samme dataelement, ulike transaksjoner, minst én er write. |
| Serializable | — | Schedule har samme effekt som en eller annen seriell rekkefølge. |
| Two-phase locking | 2PL | Først alle låser, så ingen flere — garanterer conflict-serializability. |
| MVCC | — | Multi-version. Reads ser snapshot, writes lager ny versjon. |
| Log Sequence Number | LSN | Monotont voksende ID på log-record. Også per side (PageLSN). |
| WAL-regel | — | Loggen må på disk før dataen. |
| Compensating Log Record | CLR | «Undo som er en redo» — gjør tilbakerulling idempotent. |
| Dirty Page Table | DPT | Sider som har endringer i buffer som ikke er på disk. |
Sjekk hva du allerede har med deg
Tre raske spørsmål før du dykker inn. Du finner full forklaring i underkapitlene.
Klar? Begynn med 8A · Intro og teori.