Transaksjoner

Transaksjoner, kap. 20-22 Svein Erik Bratsberg, IDI/NTNU Versjon 21.april 2022

Innhold

Hvorfor transaksjoner?

Databaseoperasjoner (20.1.2)

Samtidighetsproblemer, eksempel (20.1.3)

Samtidighetsproblemer (2)

Samtidighetsproblemer, klasser (20.1.3)

Incorrect summary

Oppgave

Hvorfor trenger vi recovery?

ACID - egenskaper ved en transaksjon

Transaksjon: en gruppering av operasjoner mot databasen som er

En transaksjon er vanligvis en logisk operasjon eller oppgave

Eksempler pÄ transaksjoner

Commit/Abort (20.2.2/20.2.3)

Commit/abort (2)

SET AUTOCOMMIT=0;
UPDATE Account SET b = b - 1000 WHERE id=123123;
UPDATE Account SET b = b + 1000 WHERE id=234234;
COMMIT;

Ekt-eksempel RegMÄlCtrl

INSERT INTO Reg VALUES (1,123123,31,100);
INSERT INTO Reg VALUES (2,123123,32,120);

.
INSERT INTO Reg VALUES (9,123123,175,245);
UPDATE Loper SET status = ‘ok’
WHERE brikkenr=123123;
COMMIT;

SQLs isolasjonsnivÄ

SET TRANSACTION ISOLATION LEVEL
	READ UNCOMMITTED
	READ COMMITTED
	REPEATBALE READ
	SERIALIZABLE (default)

SQLs isolasjonsnivÄ (2)

Quiz 1

  1. Tabellen er ikke pĂ„ 1. normalform ❌
  2. Samtidighetskontrollen bestemte det ✅
  3. Pga. dirty read ❓
  4. Brukeren angret seg ✅
  1. Atomicity, Concurrency, Isolation, Durability ❌
  2. Atomicty, Consistency, Isolation, Database ❌
  3. Attribute, Consistency, Isolation, Durability ❌
  4. Atomicity, Consistency, Isolation, Durability ✅
  1. Databasen har en konsistent tilstand ❌
  2. SQL commiter nĂ„r loggen er full ❌
  3. Hver SQL-setning er en egen transaksjon ✅
  4. Du har bestemt deg for bilkjþpet ❌
  1. Du fĂ„r mye dirty read ❌
  2. Tillater lite samtidighet ✅
  3. Svak isolasjon ❌
  4. Vanskelig Ă„ fĂ„ til DURABILITY ❌

READ COMMITTED

  1. When reading from the database, you will only see data that has been committed (no dirty reads).
  2. When writing to the database, you will only overwrite data that has been committed (no dirty writes).

READ COMMITED default in Oracle, MS SQL Server and PostgresSQL. There are two ways used to support this.

  1. Locking. The transaction sets write locks before writing a data item. Release of this lock is done at commit of the transaction. Before reading an item, the transaction sets a read lock on the item, but this read lock is released after the read is done.
  2. Snapshot isolation. Most databases prevent dirty reads by keeping old values for writes until the transactions commit. Read transactions may read the old value. Only when the new value is committed do transactions switch over to reading the new value. To keep single record locks would cost too much, since one writer may cause multiple readers to wait. This is also called multi-version concurrency control.

Repeatable Read

Transaksjonshistorie (20.4.1)

Fra figur 20.3 a) og b):

Ha: r1(X);r2(X);w1(X);r1(Y);w2(X);w1(Y);
Hb: r1(X);w1(X);r2(X);w2(X),r1(Y);a1;

Transaksjonshistorie - konflikt

Transaksjoner og gjenopprettbarhet (20.4.2)

Oppgaver

Historier og serialiserbarhet (20.5.1)

Historier og serialiserbarhet (2)

  1. Parallelle trÄder
  2. Diskaksess - andre trÄder kan jobbe sÄ lenge

Konfliktserialiserbarhet (20.5.1)

Konfliktserialiserbarhet

Presedensgraf (20.5.2)

Serialiserbarhet ved lÄsing (21.1.1)

Implementasjon av lÄser (21.1.1)

(B); r1 (A); r2 (A); r1 (B); r3 (B); 34 LÄseimplementasjon

(B); r1 (A); r2 (A); r1 (B); r3 (B); 35 2PL - tofaselÄsing (two-phase locking)

skjer fÞr alle opplÄsingsoperasjoner T1 T2 Write_lock(X) Write_lock(X) Read(X) wait X = X + 1000 wait Write(X) wait Commit / Unlock(X) Read(X) X = X - 100 Write(X) Commit / Unlock(X) 36 2PL og «incorrect summary» T1 T2 Write_lock(X) Sum = 0 Read(X) Read_lock(X) X = X - 100 Wait Write(X) Wait Write_lock(Y) Wait Read(Y) Wait Y = Y + 100 Wait Write(Y) Wait Commit / Unlock (X, Y) Wait Read(X) Sum = Sum + X Read_lock(Y) Read(Y) Sum = Sum + Y Commit / Unlock (X,Y) 37 2PL impliserer serialiserbarhet 38 2PL-modeller

39 VranglÄs (21.1.3)

hverandres lÄser

T1 T2 Read_lock(X) Read_lock(Y) Write_lock(Y) Write_lock(X) 40 VranglÄsoppdagelse (21.1.3)

, fÄr vi en rettet kant Ti -> Tj

forsvinner 41 Timeout (21.1.3)

42 Rigorous 2PL eksempel

: r1 (A); w2 (A); w2 (B); w3 (B); w1 (B); C1 ; C2 ; C3 ;

: r1 (A); w2 (B); w2 (A); w3 (B); w1 (B); C1 ; C2 ; C3 ;

transaksjonen satt pÄ vent, mens de neste operasjonene i historien blir utfÞrt i sekvens. 43 Multiversjons-CC (21.3)

versjon.

(X1 ,X2 , 
., Xk )

lagres

): StĂžrste tidsstempel for en trans som har lest den

): Tidsstempel for transaksjon som skrev Xi .

, settes begge til TS(T) 44 Multiversjons-CC (2)

  1. T Ăžnsker Ă„ utfĂžre write(X)

) <= TS(T) AND read_TS(Xi ) > TS(T)

) = write_TS(Xi ) = TS(T) 2. T Ăžnsker Ă„ utfĂžre read(X)

) <= TS(T)

) = Max(TS(T), read_TS(Xi ))

update-in-place? 45 Multiversjons-CC (3)

  1. Lagrer flere versjoner av poster i databasen og kjĂžrer GC

(sÞppeltÞmming) nÄr de gamle versjonene ikke trenges lengre: Microsoft SQL, PostgresSQL, MySQL InnoDB (consistent reads).

  1. Lagrer kun siste versjon av posten, men kan konstruere den

forrige versjonen vha. undo: Oracle

«Multiversion 2PL»

  1. Read/write-transaksjoner bruker lÄser og 2PL
  2. Read-transaksjoner bruker multiversjons-CC

46 Recovery (kap. 22)

mengder data

47 Transaksjoner etter krasjrecovery

48 Force/steal-klassifisering av Logging & Recovery-algoritmer

manager til logging/recovery

ved commit.

skitten blokk?

inntil commit. 49 Force/Steal (2) No steal Steal Force Shadowing (ikke logging) kap. 22.4 Undo-logging No-redo, kap. 22.3 No-force Redo-logging No-undo, kap. 22.2 Undo/redo-logging Aries, kap.- 22.5 50 Write-ahead logging (WAL) (22.1.3)

loggen.

datablokken (for undoformÄl)

«Force log at commit» 51 WAL-konsepter i ARIES (22.5)

PageLSN < FlushedLSN

52 LSN-begreper (log sequence number) 53 Loggpost i ARIES

For abortering av transaksjon.

LSN TransID PrevLSN OpType PageId Offset BeforeImage AfterImage 54 Datastruktur for recovery (ARIES, 22.5)

55 Sjekkpunkting (22.5)

minimalisere tiden det tar Ă„ gjĂžre recovery

skitne blokker til disk (ikke ARIES) 56 Abortering av transaksjon (22.5)

loggposten (non-CLR)

(mer presise enn lÄser pÄ blokker) 57 Recovery etter krasj (22.5)

De som har committed fĂžr krasj.

De som ikke committed fĂžr krasj.

  1. Analyse: Finn vinnere og tapere. Rekonstruer DPT/TransTab
  2. REDO: Redo alle loggposter
  3. UNDO: Undo effekten av alle tapertransaksjoner

58 3 faser i Recovery 59 Recovery - eksempel Feil i lĂŠreboka: C=1 i DPT etter analysen 60 REDO av loggpost (ARIES, 22.5)

  1. Den tilhĂžrende blokken ikke er i dirty page table (DPT)
  2. Blokken er i DPT, men recLSN for blokken er stĂžrre enn

loggpostens LSN 3. Blokkens pageLSN er stÞrre eller lik loggpostens LSN. Her mÄ blokken leses inn.

  1. Sett inn / skriv after image inn i blokken.
  2. Oppdater blokkens pageLSN til loggpostens LSN

61 Andre recoveryteknikker (22.2/22.3/22.4)

data ved oppdatering. Committer transaksjonen ved Ă„ kopiere inn pekere til nye data. MĂ„ ha katalog med pekere til data.