Hva har vi gjort? SQL og Databasedesign

Like dokumenter
Transaksjoner og flerbrukerproblematikk. Transaksjoner

Repetisjonsforelesning, SQL og utover

INF3100 V2018 Obligatorisk oppgave nr. 2

DBS21 Samtidighetskontrollteknikker

1. SQL datadefinisjon og manipulering

DBS20 - Introduksjon til transaksjonsprosessering og teori

Introduksjon til fagfeltet

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Isolasjon i postgres og mysql

Transaksjonshåndtering Del 2

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Databaseadministrasjon

Transaksjonshåndtering og samtidighetskontroll

DBS22 Databasegjenopprettingsteknikker

Samtidighetsfenomener og anomalier i eksekveringsplaner. INF Ellen Munthe-Kaas 1

Transaksjonshåndtering og samtidighetskontroll

Systemfeil og logging

Transaksjonshåndtering og samtidighetskontroll

5602 DATABASER Bokmål/nynorsk. 17 (inkludert denne forsiden) Eksamensresultatene blir offentliggjort på Studentweb.

Innhold. Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer. Prinsipper for synkronisering av felles hukommelse

INF1300 Introduksjon til databaser

Transaksjonsmodell. Samtidighet (1) ACID-transaksjoner. Samtidighet (2) Systemkræsj (1) Kapittel 17, Coping With System Failure

Tilkobling og Triggere

Repetisjon av transaksjonshåndtering og samtidighetskontroll. Lana Vu

Transaksjonshåndtering. Skalerbarhet.

DBMS Database Management System (repetisjon) Programmeringsgrensesnitt. Serialiserbarhet

EKSAMEN DATABASER

FORORD... III KAPITTELOVERSIKT... VI INNHOLDSFORTEGNELSE... VII DEL I SQL OG RELASJONSDATABASER INTRODUKSJON...

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

svarforslag SLUTTEKSAMEN IBE211 Databaser, våren 2015

INF3100 Databasesystemer. Transaksjonshåndtering. ndtering Del 3. Ragnar Normann

SLUTTPRØVE 5602 DATABASER I (inkludert vedlegg og denne forsida) Vedlegg: A: Eksempeldata og B: Svarark til oppgave 4

MySQL. Historikk. Nedlasting og installasjon

Metaspråket for å beskrive grammatikk

Tabeller og enkle spørringer

Miniverden og ER- modell

Høgskolen i Telemark EKSAMEN 6102 DATABASER Tid: Hjelpemidler: Vedlegg: Eksempeldata til oppgave 1

Transaksjonshåndtering Del 3

Øving 5: Transaksjonshåndtering, logging og normalisering

Satsvise, interaktive, sanntids/innbakte systemer. Arne Maus, Ifi. Oppdeling av både program og data på flere maskiner

Databearbeiding direkte i memory på LASR server nye muligheter? Trond Holmen, SAS Institute

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Datamodellering og databaser SQL, del 2

FORORD...III KAPITTELOVERSIKT... VI INNHOLDSFORTEGNELSE...VII DEL I SQL OG RELASJONSDATABASER INTRODUKSJON...

12. Et større ASP-eksempel Innledning Beskrivelse av nett-butikken. Innhold

Videregående programmering 6

Arne Maus, Ifi. delvis lån av gamle foiler

9. ASP med databasekopling, del II

Løsningsskisse til Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

Andre sett obligatoriske oppgaver i INF3100 V2012

Datamodellering og databaser SQL, del 2

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Spørringer mot flere tabeller

Datamodellering og databaser SQL, del 2

SQL og Mengdelære. Oracle, MySQL, Access, bruker forskjellige syntaks.

For alle ikke-trivielle FDer X A i R: eller A er et nøkkelattributt i R eller X K for noen kandidatnøkkel K i R

Normalisering. Partielle avhengigheter Transitive avhengigheter Normalformer: 1NF, 2NF, 3NF, BCNF Normaliseringsstegene Denormalisering

Innhold Forord Innledning Kapittel 1 Introduksjon til databaser og databasesystem

Normalisering. ER-modell

Utvikling fra kjernen og ut

Parallelle og distribuerte databaser Del I

Sikkerhet og tilgangskontroll i RDBMS-er

Eksamensoppgave i TDT4145 Datamodellering og databasesystemer

SQL: Systemaspekter. Evgenij Thorstensen V18. Evgenij Thorstensen SQL: Systemaspekter V18 1 / 21

Skisse til løsning for eksamensoppgave i TDT4186 Operativsystemer

Parallelle og distribuerte databaser del I

Andre sett obligatoriske oppgaver i INF3100 V2013

Applikasjonsutvikling med databaser

EKSAMENSOPPGAVE I TDT4145 DATAMODELLERING OG DATABASESYSTEMER. Faglig kontakt under eksamen: Svein Erik Bratsberg og Roger Midtstraum

Andre sett obligatoriske oppgaver i INF3100 V2009

HØGSKOLEN I SØR-TRØNDELAG

ORDBMS og OODBMS i praksis

WinTid Scheduler. Oppgradering til versjon HRM

Oppgave 1 ER- og relasjonsmodell 10 %

Databasedesign HVA? HVORDAN? E/R diagram. Begrepsmessig databasedesign. Logisk databasedesign. Fysisk databasedesign

Det matematisk-naturvitenskapelige fakultet. Kontroller at oppgavesettet er komplett før du begynner å besvare det.

Transkript:

Hva har vi gjort? SQL og Databasedesign HVA? Begrepsmessig databasedesign E/R diagram Logisk databasedesign Tabeller HVORDAN? Fysisk databasedesign Filer Indekser Etter vi har behandlet de mer statiske aspektene av databaser skal vi nå ser på Databaser i Produksjon (databases at work). Databaser Leksjon 10: Transaksjoner - 1

Transaksjoner Transaksjonsbegrepet og ACID-egenskapene Transaksjonsloggen og gjenoppbygging Samtidighetsproblemer Sekvensielle og serialiserbare forløp Låsing Leselåser og skrivelåser Låsegranularitet To-fase-låsing Vranglås Tidsstempling og optimistiske metoder Pensum: Kapittel 10 Databaser Leksjon 10: Transaksjoner - 2

Øyeblikksbilde av en database Data lagres på disk, men må leses inn i hurtigminnet for beregning. Sentralenhet Hurtigminne På et bestemt tidspunkt vil en del av databasen eksistere kun i minnet. Databasesystemer er i produksjon over lang tid. Må håndtere feilsituasjoner. Databaser Leksjon 10: Transaksjoner - 3

Hva er en «operasjon»? SQL-setninger kan behandle mange rader: UPDATE Ansatt SET Lønn = Lønn * 1.1 DBHS må løpe gjennom Ansatt-tabellen og oppdatere i kolonnen Lønn for hver rad. 1 SQL-setning utfører altså mange «operasjoner». Motsatt kan vi ønske å betrakte flere SQL-setninger som en enkelt operasjon. Eksempel fra Hobbyhuset: Ordrebestilling krever innsetting av rader i Ordre og Ordrelinje, samt oppdatering av Vare. Databaser Leksjon 10: Transaksjoner - 4

Transaksjonsbegrepet En transaksjon er en logisk operasjon mot databasen som fører databasen fra en lovlig tilstand til en annen. Kan involvere en eller flere tabeller. Kan bestå av en eller flere SQL-setninger, eller gjøres fra et høynivåspråk (Visual Basic, Java, PHP, ). Programmereren bestemmer hva som er en transaksjon. Transaksjoner kan avsluttes på to måter: COMMIT: bekreft, endringene gjøres permanente ROLLBACK: angre, transaksjonen «rulles tilbake» Utfordringer: Feil - for eksempel Diskfeil (fra skrivefeil til diskkrasj) (mediefeil) Feil i programvare og/eller operativsystemet Brudd på nettverksforbindelsen strømbrudd Samtidige brukere Databaser Leksjon 10: Transaksjoner - 5

Transaksjoner i SQL Ansatt 22 mottar bestilling av 5 enheter av produkt 4034 fra kunde 1003 - og oppretter ordre 2020: INSERT INTO Ordre(OrdreNr,KNr,AnsNr) VALUES (2020,1003,22); INSERT INTO Ordrelinje(OrdreNr,VNr,Antall) VALUES (2020,'4034',5); UPDATE Vare SET Antall = Antall-5 WHERE VareNr='4034'; COMMIT; Etter den første og de to første SQL-setningene er ikke databasen i en lovlig tilstand. Databaser Leksjon 10: Transaksjoner - 6

Transaksjoner i et SQL-konsoll SQL*Plus er et interaktivt «SQL-konsoll» mot Oracle. > SELECT Spørreresultat blir vist > INSERT INTO Kvittering fra systemet To måter å sette opp et slikt konsoll: Systemet legger på en implisitt commit etter hver SQLkommando. Kan sette opp MySQL Bruker må skrive commit/rollback selv. på tilsvarende måte. Hvorfor har vi ikke noe «begin transaction»? En transaksjon går fra en commit/rollback til neste. Tenk at systemet legger inn en «første» commit ved pålogging. Noen systemer har «begin transaction». Databaser Leksjon 10: Transaksjoner - 7

ACID-egenskapene Atomicity: Alle eller ingen av deloperasjonene i en transaksjon må fullføres. Ansvar: DBHS Consistency: En transaksjon fører databasen fra en lovlig tilstand til en annen lovlig tilstand. Ansvar: Programmereren Independence: Effekt av transaksjoner under utførelse skal ikke kunne observeres av andre transaksjoner. Ansvar: DBHS Durability: Effekt av fullførte (comitted) transaksjoner lagres i databasen og skal ikke gå tapt på grunn av feil. Ansvar: DBHS Databaser Leksjon 10: Transaksjoner - 8

Transaksjonsloggen En transaksjon kan betraktes som en sekvens av lese- og skriveoperasjoner mot databasen. En transaksjonslogg er en fil på ytre lager som inneholder data om alle operasjoner som er utført mot databasen. En egen modul i DBHS har som oppgave å vedlikehold loggen. Fordi DBHS registrerer operasjoner i loggen før den skriver til databasen, blir det mulig å gjenopprette databasen ved feil. Generelt blir flere transaksjoner utført samtidig. Dermed vil oppføringene for en transaksjon ikke nødvendigvis stå samlet i loggen! Transaksjonsloggen inneholder informasjon om livsløpet til en transaksjon (bok S. 215/16). Databaser Leksjon 10: Transaksjoner - 9

Transaksjonsloggen TransID Table RowID Attribute Before After 101 *** BEGINTRANS 101 VARE 102375 ANTALL 112 113 101 VARE 102542 ANTALL 56 66 101 *** COMMIT Først ved COMMIT får transaksjoner (varig) effekt på databasen. Ved ROLLBACK: Innholdet i loggen blir ikke skrevet til databasen og eventuelle oppdateringer av databasen blir «rullet tilbake» (ved å lese loggen «baklengs»). (Diskuter «livsløp» av en transaksjon S. 215/16.) Ved gjenoppretting etter feil: Siste sikkerhetskopi blir lastet. Transaksjonsloggen brukes for å «rulle fram» til feiltidspunktet. Mer om sikkerhetskopiering og gjenoppbygging i neste leksjon. Databaser Leksjon 10: Transaksjoner - 10

Samtidighetskontroll Ønsker å tillate flere samtidige brukere av samme database. Utnytte parallellitet (CPU og I/O) Få ned gjennomsnittlig ventetid (lange og korte transaksjoner) Trygg samtidig aksess: Mange brukere kan lese samme data samtidig To brukere kan skrive samtidig kun hvis de jobber med forskjellige data. Feilsituasjoner som skyldes samtidighet: Tapt oppdatering Angret oppdatering Inkonsistent analyse Slike feil kan bare oppstå i et DBHS uten skikkelig samtidighetskontroll. Først ser vi på feilene, og deretter på løsningene. Databaser Leksjon 10: Transaksjoner - 11

Les-Beregn-Skriv Hva skjer når en «celle» på ytre lager skal oppdateres? UPDATE Ansatt SET Lønn = Lønn * 1.1 WHERE AnsNr = 14 Transaksjonen består av følgende deloperasjoner: 1. Les post med AnsNr = 14 fra ytre lager 2. Beregn ny lønn 3. Skriv resultat til ytre lager Les-Beregn-Skriv er ikke en atomær operasjon. Det betyr at to oppdateringer kan «flettes» i tid! Databaser Leksjon 10: Transaksjoner - 12

Tapt oppdatering Samtidighetsproblemer kan oppstå når to transaksjoner jobber med samme data til samme tid. Vi studerer hva som skjer når to transaksjoner skal oppdatere kolonnen Saldo i en bestemt rad (et tall). Transaksjon 1: Saldo 1 :=Saldo 1-10 Transaksjon 2: Saldo 1 :=Saldo 1 +100 Oppdateringen til transaksjon 2 blir skrevet over av transaksjon 1 og går tapt. Hvis Saldo=150 ved start, så får vi her Saldo=140 ved slutt. Korrekt resultat er Saldo=240 (150+100-10). Databaser Leksjon 10: Transaksjoner - 13

Angret oppdatering Transaksjon 1 bygger på et resultat fra transaksjon 2 som transaksjon 2 seinere «angrer» på at den produserte. Transaksjon 1: Saldo 1 :=Saldo 1-10 Transaksjon 2: Saldo 1 :=Saldo 1 +100 ROLLBACK Transaksjoner må ikke få lov til å avlese andres «mellomresultater». Databaser Leksjon 10: Transaksjoner - 14

Inkonsistent analyse Transaksjon 2 produserer en rapport basert på noen «gamle» og noen «nye» resultater. Transaksjon 1: Saldo 1 :=Saldo 1-10 READ(Saldo 3 ) Saldo 3 :=Saldo 3 +10 WRITE(Saldo 3 ) Transaksjon 2: Sum:=0 Sum:=Sum+Saldo 1 READ(Saldo 2 ) Sum:=Sum+Saldo 2 READ(Saldo 3 ) Sum:=Sum+Saldo 3 Selv 1 «leser» og 1 «skriver» kan gi samtidighetsproblemer! Databaser Leksjon 10: Transaksjoner - 15

Låser Generell løsning på samtidighetsproblemene: Transaksjoner må vente på hverandre. En lås (lock) er en «ventemekanisme». En transaksjon kan låse en bestemt datamengde: hele databasen en tabell en rad i en tabell en «celle» i en rad i en tabell Vi skiller mellom skrivelåser (exclusive locks) og leselåser (shared locks). Hver lås kan føre til en ventekø. DBHS må holde styr på mange ventekøer. Databaser Leksjon 10: Transaksjoner - 16

Tapt oppdatering Samtidighetsproblemer kan oppstå når to transaksjoner jobber med samme data til samme tid. Vi studerer hva som skjer når to transaksjoner skal oppdatere kolonnen Saldo i en bestemt rad (et tall). Transaksjon 1: Saldo 1 :=Saldo 1-10 Transaksjon 2: Saldo 1 :=Saldo 1 +100 Oppdateringen til transaksjon 2 blir skrevet over av transaksjon 1 og går tapt. Hvis Saldo=150 ved start, så får vi her Saldo=140 ved slutt. Korrekt resultat er Saldo=240 (150+100-10). Databaser Leksjon 10: Transaksjoner - 17

Løsning: Tapt oppdatering Transaksjon 1: BEGINTRANS WRITELOCK(Saldo 1 ) WAIT WAIT WAIT WAIT Saldo 1 :=Saldo 1-10 UNLOCK(Saldo 1 ) COMMIT Transaksjon 2: BEGINTRANS WRITELOCK(Saldo 1 ) Saldo 1 :=Saldo 1 +100 UNLOCK(Saldo 1 ) COMMIT Databaser Leksjon 10: Transaksjoner - 18

Angret oppdatering Transaksjon 1 bygger på et resultat fra transaksjon 2 som transaksjon 2 seinere «angrer» på at den produserte. Transaksjon 1: Saldo 1 :=Saldo 1-10 Transaksjon 2: Saldo 1 :=Saldo 1 +100 ROLLBACK Transaksjoner må ikke få lov til å avlese andres «mellomresultater». Databaser Leksjon 10: Transaksjoner - 19

Løsning: Angret oppdatering Transaksjon 1: BEGINTRANS WRITELOCK(Saldo 1 ) WAIT WAIT WAIT WAIT WAIT Saldo 1 :=Saldo 1-10 UNLOCK(Saldo 1 ) COMMIT Transaksjon 2: BEGINTRANS WRITELOCK(Saldo 1 ) Saldo 1 :=Saldo 1 +100 UNLOCK(Saldo1) ROLLBACK Databaser Leksjon 10: Transaksjoner - 20

Inkonsistent analyse Transaksjon 2 produserer en rapport basert på noen «gamle» og noen «nye» resultater. Transaksjon 1: Saldo 1 :=Saldo 1-10 READ(Saldo 3 ) Saldo 3 :=Saldo 3 +10 WRITE(Saldo 3 ) Transaksjon 2: Sum:=0 Sum:=Sum+Saldo 1 READ(Saldo 2 ) Sum:=Sum+Saldo 2 READ(Saldo 3 ) Sum:=Sum+Saldo 3 Selv 1 «leser» og 1 «skriver» kan gi samtidighetsproblemer! Databaser Leksjon 10: Transaksjoner - 21

Løsning: Inkonsistent analyse Transaksjon 1: BEGINTRANS WRITELOCK(Saldo 1 ) Saldo 1 :=Saldo 1-10 WRITELOCK(Saldo 3 ) READ(Saldo 3 ) Saldo 3 :=Saldo 3 +10 WRITE(Saldo 3 ) UNLOCK(Saldo 1 ) UNLOCK(Saldo 3 ) COMMIT Transaksjon 2: BEGINTRANS Sum:=0 READLOCK(Saldo 1 ) WAIT WAIT....... WAIT... Databaser Leksjon 10: Transaksjoner - 22

Serialiserbarhet Et forløp er en «fletting» i tid av deloperasjonene til en samling transaksjoner. Opplagt riktig resultat: Kun 1 transaksjon av gangen = sekvensiell forløp. Men: Det er mer effektivt med samtidige transaksjoner. Et serialiserbart forløp tillater samtidighet («fletting»), men har samme effekt som et sekvensielt forløp. Galt resultat - ikke serialiserbart forløp. T1: WRITELOCK(X) T1: X = X-5 T1: UNLOCK(X) T2: WRITELOCK(X) T2: WRITELOCK(Y) T2: IF X>0 THEN X = X-10 T2: IF Y>0 THEN Y = Y-10 T2: UNLOCK(X) T2: UNLOCK(Y) T1: WRITELOCK(Y) T1: Y = Y-5 T1: UNLOCK(Y) Databaser Leksjon 10: Transaksjoner - 23

To-fase-låsing En transaksjon følger reglene for to-fase låsing hvis alle låseoperasjoner gjøres før første frigivelse (opplåsing). Det vil si, ingen låsing etter første opplåsing! Lås Lås opp Lås Lås opp Lås Lås opp vokse fase minke fase Følgende gjelder: Hvis alle transaksjoner følger to-fase låsing vil ethvert forløp bli serialiserbart. Databaser Leksjon 10: Transaksjoner - 24

Vranglås:The Dining Philosophers Filosofene tenker og spiser. Hva skjer hvis alle fire vil spise samtidig? En filosof trenger begge gaflene for å spise (pasta av den sleipe typen). Vranglås:Transaksjoner som gjensidig venter på at de andre skal frigi låser. Databaser Leksjon 10: Transaksjoner - 25

Oppdage og «løse opp» vranglås Håndtere vranglås Bygge opp en ventegraf: Hvis transaksjon T1 må vente på transaksjon T2, så legg til en kant (pil) fra T1 til T2. Av og til: Gå gjennom ventegrafen og sjekk om det har oppstått en cykel, for eksempel at T1 venter på T2 som venter på T3 som igjen venter på T1. Velg en av transaksjonene i cykelen. Avbryt transaksjonen («rull den tilbake»). Gjennomfør de andre, og start avbrutt transaksjon etterpå. Forhindre vranglås Alle transaksjoner gis et unikt tidsstempel. Hvis en transaksjon vil måtte vente på en eldre transaksjon blir den avbrutt. Det betyr at yngre transaksjoner aldri vil vente på eldre og dermed kan det ikke oppstå cykler. Databaser Leksjon 10: Transaksjoner - 26

Pessimistisk og optimistisk låsing Pessimistisk låsing = standard låsing. Optimistisk låsing: Hensiktsmessig i systemer med få konflikter, for eksempel hvis de fleste kun leser, og i «interaktive» databaseapplikasjoner. Transaksjoner blir utført uten restriksjoner fram til COMMIT, men skriver til lokal kopi. Validering før lokal kopi blir skrevet til databasen. Kan velge mellom optimistisk/pessimistisk låsing i Access. Databaser Leksjon 10: Transaksjoner - 27

Oppsummering En transaksjon er en logisk operasjon. Blir definert ved COMMIT og ROLLBACK. Skal tilfredsstille ACID-egenskapene. DBHS må håndtere feil og samtidighet. Feil: Hvilke transaksjoner ble avbrutt når? Strømbrudd: Transaksjonslogg. Diskkrasj: Sikkerhetskopi + transaksjonslogg. Samtidighet: Transaksjoner må ikke få lov til å «forstyrre» hverandre. DBHS bruker leselåser og skrivelåser. Låser alene sikrer ikke et korrekt resultat. Tofase-låsing sikrer serialiserbare forløp. Kan fremdeles få vranglås. Vranglås kan oppdages eller forhindres. Databaser Leksjon 10: Transaksjoner - 28