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:
- Alt eller ingenting — enten gjøres alle stegene, eller ingen.
- Konsistens bevares — integritetskrav (PK, FK, CHECK) holder etter commit.
- Som om alene — to samtidige transaksjoner skal ikke se hverandre halvferdige.
- Varig — etter commit overlever resultatet enhver krasj.
Disse fire er kjent som ACID. Hele kapittel 8 forklarer hvordan databasen faktisk leverer dem.
Kartet over alt som skjer
Tre hovedmekanismer jobber sammen i bakgrunnen hver gang du skriver BEGIN; … COMMIT;:
Slidene transaksjoner.pdf dekker hele kapittelet. Underkapitlene under er bygd opp som lese-stier — figurer og quizzer underveis, ikke bare i slutten.
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.