transaksjoner, isolasjon og låsing i sql server

26
Transaksjoner, isolasjon og låsing i SQL Server Hans Olav Norheim http://hansolav.net [email protected]

Upload: tamekah-fitzgerald

Post on 01-Jan-2016

50 views

Category:

Documents


5 download

DESCRIPTION

Transaksjoner, isolasjon og låsing i SQL Server. Hans Olav Norheim http://hansolav.net [email protected]. Agenda. Transaksjoner ACID, transaksjonslogging Samtidighet og effekter av samtidighet Isolasjonsnivåer Deadlocks. Databaser. Litt mer enn bare tabeller med data… - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Transaksjoner, isolasjon og låsing i SQL Server

Transaksjoner, isolasjon og låsing i SQL Server

Hans Olav Norheimhttp://hansolav.net

[email protected]

Page 2: Transaksjoner, isolasjon og låsing i SQL Server

AgendaTransaksjonerACID, transaksjonsloggingSamtidighet og effekter av samtidighetIsolasjonsnivåerDeadlocks

Page 3: Transaksjoner, isolasjon og låsing i SQL Server

DatabaserLitt mer enn bare tabeller med data…

Datauavhengighet

Spørringer og optimalisering

Samtidighetskontroll

Page 4: Transaksjoner, isolasjon og låsing i SQL Server

Hvorfor transaksjoner?Vi flytter penger fra en konto til en annen via

nettbankHva om …

Transaksjon: En separat enhet arbeid som enten er vellykket og lagres eller rulles tilbake.

Page 5: Transaksjoner, isolasjon og låsing i SQL Server

Transaksjoner i SQLAutocommitEkplisitte

BEGIN TRAN … COMMIT/ ROLLBACK TRAN på en connection til DB

.NET:conn.BeginTransaction();using (TransactionScope ts = new Tr…()) {}

Kan også inneholde DDLCREATE/DROP TABLE/VIEW/PROC…

Page 6: Transaksjoner, isolasjon og låsing i SQL Server

ACIDAtomicity trans.logging

Alt eller ingentingConsistency

Oppfyller krav/constraintsIsolation låsing

Som om de var kjørt en om gangenDurability trans.logging

”Commit OK” til klient er bindene for SQL Server

Page 7: Transaksjoner, isolasjon og låsing i SQL Server

TransaksjonsloggingAlle SQL Server databaser har en .ldf-fil

(loggen)Logger alle endringer som gjøres mot

databasen til disk

Nødvendig for å oppfylle ACID

Bonus: Gir også mulighet for point-in-time recoverydersom recovery model er satt til Full

Page 8: Transaksjoner, isolasjon og låsing i SQL Server

AtomicityKrasj/strømmbrudd midt i transaksjonen

Hvis ikke committet, MÅ rulles tilbake

”Undo” under recovery ved oppstart

”Alt eller ingenting”

Page 9: Transaksjoner, isolasjon og låsing i SQL Server

DurabilityTransaksjonen må ikke mistes selv om

krasj/strømbrudd etter commit

Loggen, inkludert commit-recorden flushes til disk

”Redo” under recovery ved oppstart

”Endringer lagret når klient fått

OK”

Page 10: Transaksjoner, isolasjon og låsing i SQL Server

IsolasjonFull isolasjon: Som om transaksjonene kjørte

etter hverandre i serie Serializable

I praksis senker vi isolasjonen for å få bedre ytelse…

Lese/Lese Lese/Skrive

Page 11: Transaksjoner, isolasjon og låsing i SQL Server

SamtidighetsmodellerPessimistisk samtidighet

Antar at transaksjoner kommer i konflikt og forhindrer det

Tar låser under lesing – unngår konflikter

Transaksjoner må vente på hverandre

Page 12: Transaksjoner, isolasjon og låsing i SQL Server

SamtidighetsmodellerOptimistisk samtidighet

Antar at vi ikke kommer i konflikt med andres skriving

Ingen låser når vi leser, får en gammel versjon

Ingen venting

Skrivekonflikt rulles tilbake

Page 13: Transaksjoner, isolasjon og låsing i SQL Server

Lost Update

Tran1

Tran2

Tid

X=10

X=20

X=25

Les X(10)

X=X+15

(25)

Skriv X

Les X(10)

X=X+10

(20)

Skriv X

To transaksjoner overskriver hverandre

Sjeldent særlig bra…

Page 14: Transaksjoner, isolasjon og låsing i SQL Server

Dirty Read

Tran1

Tran2

Tid

X=10

X=25

X=10

Les X(10)

X=X+15

(25)

Skriv X

Les X(25)

Rollback

Leser ucommittede data (kan forsvinne

igjen)

Kan bedre ytelse der det ikke er så farlig (eks. rapporter)

Page 15: Transaksjoner, isolasjon og låsing i SQL Server

Non-Repeatable Read

Tran1

Tran2

Tid

X=10

X=25

Les X(10)

X=X+15

(25)

Skriv X

Les X(25)

Les X(10)

Gjentatt lesing ulik i samme transaksjon

Page 16: Transaksjoner, isolasjon og låsing i SQL Server

Phantoms

Tran1

Tran2

Tid

INSERT (ID,

Navn)(4,

Nissen)

SELECT COUNT(*)WHERE Name =

’Nissen’(1)

Data ”dukker opp”

3, Nissen

3, Nissen

4, Nissen

SELECT COUNT(*)WHERE Name =

’Nissen’(2)

Demo

Page 17: Transaksjoner, isolasjon og låsing i SQL Server

IsolasjonsnivåerEgenskap for en transaksjon

SET TRANSACTION ISOLATION LEVEL …conn.BeginTransaction(IsolationLevel.Serializa

ble);

Definerer hvilke effekter du tillater

Hvor isolert trans. skal være fra andre trans’ endringer

Page 18: Transaksjoner, isolasjon og låsing i SQL Server

IsolasjonsnivåerHøy isolasjon – Lav samtidighet,

ressurskrevende

Lav isolasjon – Høy samtidighet, minimalt overhead

Page 19: Transaksjoner, isolasjon og låsing i SQL Server

Isolasjonsnivåer (<= Shiloh, SQL2000)Isolasjonsnivå

Lost Updates

Dirty Reads

Non-Repeatable

Phantoms

Read Uncommited Ja Ja Ja Ja

Read Committed (default)

Ja Nei Ja Ja

Repeatable Read Nei Nei Nei Ja

Serializable Nei Nei Nei Nei

Forhindrer kun fysisk korrupte

data

Fullstendig isolasjon

Ikke ved enkelt-statement UPDATEDemo

Page 20: Transaksjoner, isolasjon og låsing i SQL Server

MVCC (>= Yukon, SQL2005)Multi Version Concurrency ControlOptimistisk samtidighet

God idé: Snapshot Isolation

Tar ikke låser, får gammel versjon

Page 21: Transaksjoner, isolasjon og låsing i SQL Server

Deadlocks

Når to (eller flere) oppgaver/transaksjoner blokkerer hverandre og ingen kommer videre

En velges som deadlock victim

Tran A

Tran B

Tran C

Page 22: Transaksjoner, isolasjon og låsing i SQL Server

Demo

Tran 1

Tran 2

Exclusive (Foo.RID1)

• INSERT FooVALUES (1)

Shared(Bar.RID1)

• SELECT *FROM Bar

Exclusive (Bar.RID1)

• INSERT BarVALUES (1)

Shared(Foo.RID1)

• SELECT *FROM Foo

DEADLOCK!

Page 23: Transaksjoner, isolasjon og låsing i SQL Server

Hvordan unngå?Aksesser objekter i samme rekkefølge (!

demo)Så korte transaksjoner som mulig

Ikke brukerinteraksjon i en transaksjonFærrest mulig roundtrips til SQL Server

Bruk så lavt isolasjonsnivå som mulig…

Page 24: Transaksjoner, isolasjon og låsing i SQL Server

OppsummeringEn database er litt mer enn bare datalagring

Tenk over hvilken isolasjon du kjører under

Følg ”best practices” for deadlocks

Page 25: Transaksjoner, isolasjon og låsing i SQL Server

Ressurserhttp://www.sql-server-performance.com/articl

es/dba/isolation_levels_2005_p1.aspxhttp://sommarskog.se/http://msdn.microsoft.com/en-us/library/ms19

1242.aspx

Page 26: Transaksjoner, isolasjon og låsing i SQL Server

Spørsmål?