CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Samankaltaiset tiedostot
CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 47

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 29

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 39

CSE-A1200 Tietokannat

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 32

CSE-A1200 Tietokannat

HAAGA-HELIA Heti-09 1 (14) ICT05: Tiedonhallinta ja Tietokannnat O.Virkki Transaktionkäsittely

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

HELIA 1 (14) Outi Virkki Tiedonhallinta

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

CS-A1150 Tietokannat CSE-A1150 Tietokannat / 39

IIO30220 Database Management / Tietokannan hallinta TAPAHTUMIEN HALLINTA JOUNI HUOTARI ( )

Insert lauseella on kaksi muotoa: insert into taulu [(sarakenimet)] values (arvot)

TIEDONHALLINTA - SYKSY Luento 11. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

CSE-A1200 Tietokannat

Samanaikaisuuden hallinta. Optiot transaktionaalisissa työnkuluissa

CS-A1150 Tietokannat CS-A1150 Tietokannat / 44

SQL-perusteet, SELECT-, INSERT-, CREATE-lauseet

D B. Tietokannan hallinta kertaus

D B. Transaktionhallinta - samanaikaisuus. Transaktionhallinta - samanaikaisuus. Transaktionhallinta - samanaikaisuus

D B. Transaktionhallinta - samanaikaisuus

Lisätään avainarvo 6, joka mahtuu lehtitasolle:

Helsingin yliopisto/tktl Tietokannan hallinta, kevät Harri Laine 1 D B. Transaktionhallinta - samanaikaisuus

CS-A1150 Tietokannat

CS-A1150 Tietokannat

CS-A1150 Tietokannat CS-A1150 Tietokannat / 54

CS-A1150 Tietokannat CS-A1150 Tietokannat / 51

Tietohakemisto ja Transaktionkäsittely

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

CS-A1150 Tietokannat CS-A1150 Tietokannat / 35

Samanaikaisuuden hallinta. tietokantapalvelimessa. Tiedonhallintaa. Alkuper. versio: Jaakko Rantanen Pieniä korjauksia: Jouni Huotari 26.2.

CSE-A1200 Tietokannat

CS-A1150 Tietokannat

Transaktionhallinta. R & G Chapter Tietokannan hallinta, kevät 2006, J. Li 1

Helsingin yliopisto Tietojenkäsittelytieteen laitos (H.Laine) Tietokantojen perusteet. Liitteenä: Tiivistelmä SQL-syntaksista

Lisätään avainarvo 1, joka mahtuu lehtitasolle:

Transaktioiden eristyvyys

HELIA 1 (15) Outi Virkki Tietokantasuunnittelu

5.2 Samanaikaisuuden hallinta

CSE-A1200 Tietokannat

HELIA TIKO-05 SQL-TRANSAKTIOT 1 ( 12) ICT03D Tieto ja tiedon varastointi

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

CS-A1150 Tietokannat CS-A1150 Tietokannat / 34

Samanaikaisuuden hallinta Snapshot Isolationin avulla

Transaktionhallinta. Transaktionhallinta. Transaktionhallinta. R & G Chapter 17

TIEDONHALLINTA - SYKSY Luento 12. Hannu Markkanen /10/12 Helsinki Metropolia University of Applied Sciences

CS-A1150 Tietokannat CS-A1150 Tietokannat / 43

Ohjelmoinnin perusteet Y Python

Helsingin yliopisto/tktl Tietokannan hallinta, kevät Harri Laine 1 D B. Transaktionhallinta. Transaktionhallinta. Transaktionhallinta

SQL. ! nykystandardi SQL3 eli SQL'99. ! CREATE TABLE, ALTER TABLE ja DROP TABLE. ! CREATE VIEW ja DROP VIEW. ! CREATE INDEX ja DROP INDEX

R 2 [0] ei ole likainen luku, sillä avaimelle 0 on jo palautettu sen alkuperäinen arvo.

SQL - STRUCTURED QUERY LANGUAGE

Tietokantarakenteet ja -algoritmit 6. harjoitus

Java ja tietokannan käsittely (JDBC)

CSE-A1200 Tietokannat

oheishakemistoja voi tiedostoon liittyä useita eri perustein muodostettuja

Tietokannan hallinta. Kevät 2004 Jan Lindström R&G Chapter 1

Liitosesimerkki Tietokannan hallinta, kevät 2006, J.Li 1

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Tietokantarakenteet ja -algoritmit 3. harjoitus

5. Tapahtumien hallinta. Esim. pankkitilisovelluksen proseduuri tilisiirto(t1, t2, x), joka siirtää x mk tililtä t1 tilille t2:

CS-A1150 Tietokannat

Tietokannat II -kurssin harjoitustyö

HELIA TIKO-05 1 (17) ICT03D Tieto ja tiedon varastointi Räty, Virkki

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

Tietojärjestelmä tuotantoympäristössä. Sovellusohjelmat Helsingin ammattikorkeakoulu Stadia / Tekniikka ja liikenne Vesa Ollikainen

TIETOKANTOJEN PERUSTEET MARKKU SUNI

TKHJ:ssä on yleensä komento create index, jolla taululle voidaan luoda hakemisto

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

Harjoitustyö. CSE-A1200 Tietokannat! Jasse Lahdenperä! ! Henri Nurmi! !

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Tietokantojen perusteet, , H.Laine

Tilannevedoseristyvyydessä esiintyvät eristyvyysanomaliat

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

select tulostietomäärittely from taulukkeet [where valintaehdot] [group by ryhmitystekijät] [having ryhmärajoitteet] [order by järjestysperusta]

D B. Transaktionhallinta

Tietokantakurssit / TKTL

Helsingin yliopisto/tktl Kyselykielet, s 2006 Optimointi Harri Laine 1. Kyselyn optimointi. Kyselyn optimointi

Rinnakkaistietokoneet luento S

Ohjelmoinnin perusteet Y Python

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Jokaisella tiedostolla on otsake (header), joka sisältää tiedostoon liittyvää hallintatietoa

Muita tietokantaobjekteja. Näkymät, synonyymit, indeksointi, valtuudet ja systeemihakemisto

MUITA TIETOKANTAOBJEKTEJA NÄKYMÄT, SYNONYYMIT, INDEKSOINTI, VALTUUDET JA SYSTEEMIHAKEMISTO

Elvytys. R & G Chapter Tietokannan hallinta, kevät 2006, J. Li 1

HAAGA-HELIA Heti-09 1 (12) ICT05 Tiedonhallinta ja Tietokannat O.Virkki Näkymät

Tietorakenteet, laskuharjoitus 7, ratkaisuja

2. Haet työntekijöiden tiedot etunimen mukaan nousevasti järjestettyinä. (ORDER BY) SELECT * FROM employees ORDER BY firstname ASC;

Luku 8. Aluekyselyt. 8.1 Summataulukko

HELIA 1 (14) Outi Virkki Tiedonhallinta

TIETOKANTOJEN PERUSTEET OSIO 14 MARKKU SUNI

Hajautusrakenteet. R&G Chapter Tietokannan hallinta, kevät 2006, Jan 1

HELIA 1 (12) Outi Virkki Tiedonhallinta

Maiju Mykkänen Susanna Sällinen

FROM-lausekkeessa voidaan määritellä useampi kuin yksi taulu, josta tietoja haetaan: Tuloksena on taululistassa lueteltujen taulujen rivien

Transkriptio:

CS-A1150 Tietokannat 15.4.2019 CS-A1150 Tietokannat 15.4.2019 1 / 43

Oppimistavoitteet: tämän luennon jälkeen Tiedät, mitä tarkoitetaan hakemistolla ja mitä hyötyä hakemistosta on. Tiedät, miten voidaan arvioida, mitä hakemistoja tietokantaan kannattaa määritellä. Tiedät, miten ohjelmoija voi suojella tietokantaa erilaisilta häiriötilanteilta transaktioiden avulla. Osaat kertoa, mitä ominaisuuksia tietokannan hallintajärjestelmä takaa transaktioiden toteuttavan. Tiedät, millä eri tavoin transaktioilta vaadittavista ominaisuuksista voidaan joskus tinkiä tehokkuuden lisäämiseksi. Voit luennon aikana lähettää kysymyksiä ja kommentteja myös sivulla http://presemo.aalto.fi/tietokannat2019 CS-A1150 Tietokannat 15.4.2019 2 / 43

Esimerkkitietokanta Customers(custNo, name, born, bonus, address, email) Products(number, prodname, description, price, manufid) Manufacturers(ID, manufname, phone) Orders(orderNo, deliver, status, custno) BelongsTo(orderNo, productno, count) CS-A1150 Tietokannat 15.4.2019 3 / 43

Miksi tarvitaan hakemistoja? Tietokannan taulussa rivit ovat usein satunnaisessa järjestyksessä. 112233 554422 37856 77233 31355 224477 43255 44551 443311 Teemu Teekkari 1995 55 Riina Raksalainen 1993 43 Antti Virta 1970 12 Nina Teekkari 1991 20 Ville Virtanen 1997 14 Teemu Teekkari 1998 22 Sanna Konelainen 1995 17 Ville Virtanen Teemu Teekkari 1991 1986 12 45 Vaikka rivit järjestettäisiinkin yhden attribuutin mukaan, ei siitä ole mitään apua, jos tehdään kysely jonkin muun attribuutin arvon perusteella. CS-A1150 Tietokannat 15.4.2019 4 / 43

Miksi tarvitaan hakemistoja? (jatkuu) Ilman hakemistoja tavalliseen SQL-kyselyyn vastaaminen vaatii usein koko taulun läpikäymisen. Esimerkiksi SELECT FROM Customers WHERE name = Ville Virtanen ; käy läpi kaikki Customers-relaation monikot. CS-A1150 Tietokannat 15.4.2019 5 / 43

Miksi tarvitaan hakemistoja? (jatkuu) Liitoksia tarvitsevassa kyselyssä tilanne on vieläkin hankalampi, esimerkiksi SELECT orderno, C.custNo, name, address FROM Customers AS C, Orders AS O WHERE C.custNo = O.custNo; käydään Customers-relaatio kokonaan läpi jokaista Orders-relaation monikkoa kohti. CS-A1150 Tietokannat 15.4.2019 6 / 43

Hakemistot Hakemiston (index) avulla voidaan löytää nopeasti monikot, joiden määrätyllä attribuutilla tai attribuuttien yhdistelmällä on haluttu arvo. Hakemisto attr. name mukaan Taulu Customers Riina Raksalainen Teemu Teekkari Sanna Konelainen Nina Teekkari Antti Virta Ville Virtanen 112233 554422 37856 77233 31355 224477 43255 44551 443311 Teemu Teekkari 1995 55 Riina Raksalainen 1993 43 Antti Virta 1970 12 Nina Teekkari 1991 20 Ville Virtanen 1997 14 Teemu Teekkari 1998 22 Sanna Konelainen 1995 17 Ville Virtanen Teemu Teekkari 1991 1986 12 45 CS-A1150 Tietokannat 15.4.2019 7 / 43

Hakemistot (jatkuu) Hakemistoissa tallennetun arvon yhteyteen on lisätty tieto siitä, mistä kohdasta/kohdista tietokannan taulusta arvo/arvot löytyy/löytyvät. Hakemiston rakenne on sellainen, että haettu arvo löytyy sieltä hyvin nopeasti. Useimmiten tietokannan hallintajärjestelmissä hakemistot on toteutettu B-puina (engl. B-tree). Toinen vaihtoehto hakemiston toteuttamiselle on hajautusrakenne (engl. hashing). Hajautusrakenne sopii täsmällisen arvon hakemiseen, B-puut myös arvovälikyselyihin. CS-A1150 Tietokannat 15.4.2019 8 / 43

Esimerkki B-puusta 13 29 79 5 19 47 67 71 85 2 5 6 7 1112 1419 2023 314147 50536163 6871 7375 808384 8788 Oikeasti kullakin solmulla on kymmeniä tai satoja lapsisolmuja. Lehtisolmuissa jokaiseen arvoon liittyy tieto siitä, missä tämä arvo esiintyy tietokannan taulussa määrätyn attribuutin arvona. CS-A1150 Tietokannat 15.4.2019 9 / 43

Hakemiston luominen Hakemisto luodaan SQL:ssä käskyllä CREATE INDEX, esimerkiksi CREATE INDEX CustomerIndex ON Customers(name); Hakemiston voi luoda useamman attribuutin arvon perusteella seuraavasti: CREATE INDEX ProductIndex ON Products(description, manufid); CS-A1150 Tietokannat 15.4.2019 10 / 43

Koska hakemiston luominen kannattaa? Sopiva hakemisto voi nopeuttaa selvästi kyselyitä. Kannattaako siis tehdä hakemistot taulujen kaikkien attribuuttien suhteen? Vastaa sivulla http://presemo.aalto.fi/tietokannat2019 CS-A1150 Tietokannat 15.4.2019 11 / 43

Ratkaiseva tekijä hakemiston hyötyjä ja kustannuksia arvioitaessa Tarvittavien levyhakujen määrä kyselyitä ja päivityksiä tehdessä. Vaikka haluttaisiin tutkia vain yksi relaation monikko, on haettava keskusmuistiin koko se levysivu, jolla monikko sijaitsee. Levyhakuun menee paljon aikaa verrattuna kaikkeen siihen, mitä keskusmuistissa yleensä tehdään. Kyselyt nopeutuvat, jos hakemiston avulla voidaan vähentää selvästi tarvittavien levyhakujen määrää. CS-A1150 Tietokannat 15.4.2019 12 / 43

Milloin hakemiston luominen voi kannattaa, jatkoa CS-A1150 Tietokannat 15.4.2019 13 / 43

Milloin hakemiston luominen voi kannattaa, jatkoa Jos attribuutti on relaation avain. Jos jollain attribuutilla sama arvo esiintyy vain harvoilla monikoilla. Jos relaation monikot on klusteroitu jonkin attribuutin arvon mukaan. CS-A1150 Tietokannat 15.4.2019 13 / 43

Välitehtävä 1 Oletetaan, että relaatio Students(ID, name, program, year) on tallennettu niin, että yhdelle levysivulle mahtuu keskimäärin 40 monikkoa. Tietokannasta haetaan usein määrättynä vuonna aloittaneita opiskelijoita, esimerkiksi SELECT FROM Students WHERE year = 2017; Kannattaako (ja miksi) tehdä hakemisto year-attribuutin mukaan, jos 1. eri vuosina aloittaneet opiskelijat ovat jakautuneet satunnaisesti relaation monikoiden kesken? 2. relaation monikot on klusteroitu year-attribuutin arvon mukaan? Vastaa sivulla http://presemo.aalto.fi/tietokannat2019 CS-A1150 Tietokannat 15.4.2019 14 / 43

Mitä hakemistoja kannattaa luoda? Arvioidaan kyselyjen ja päivitysten suhde tietokannan operaatioissa ja millaisia kyselyitä tietokantaan yleensä tehdään. Lasketaan erikseen, kuinka paljon levyhakuja tarvitaan keskimäärin eri operaatioissa eri hakemistoyhdistelmillä. Otettava mukaan myös mahdollisen hakemiston käytöstä aiheutuvat levyhaut: Kyselyssä vähintään yksi / käytetty hakemisto. Päivityksissä vähintään kaksi / hakemisto. Lasketaan operaatioiden esiintymistodennäköisyyksillä painotettu keskiarvo tarvittavista levyhauista kullekin hakemistoyhdistelmälle. CS-A1150 Tietokannat 15.4.2019 15 / 43

Esimerkki hakemistojen valinnasta Tarkastellaan relaatiota BelongsTo(orderNo, productno, count) ja lasketaan, mitä hakemistoja relaatiolle kannattaa luoda, jos Tehtävät kyselyt: 1. Haetaan monikoita, joissa on määrätty tilausnumero, osuus kaikista relaatioon kohdistuvista tietokantaoperaatioista on p 1. 2. Haetaan monikoita, joissa on määrätty tuote, osuus p 2. Relaatioon tehdään myös lisäyksiä, osuus 1 p1 p 2. Relaation monikot vievät yhteensä 100 levysivua. Yhdessä tilauksessa on keskimäärin 3 tuotetta ja kukin tuote kuuluu keskimäärin 30 tilaukseen. Monikoita ei ole klusteroitu minkään attribuutin arvon mukaan. CS-A1150 Tietokannat 15.4.2019 16 / 43

Esimerkki hakemistojen valinnasta, jatkoa Useimmiten jokainen tulosmonikko on eri levysivulla. Hakemistoa käytettäessä ensimmäiseen kyselyyn vastaaminen vaatii yleensä 3 + 1 levyhakua. Toiseen kyselyyn vastaaminen vaatii hakemistoa käytettäessä yleensä 30 + 1 levyhakua. Lisäysten yhteydessä jokaista hakemistoa kohti tarvitaan kaksi levyhakua. Lisäksi tarvitaan yhteensä kaksi levyhakua itse päivitettävän relaation levysivun lukemiseen ja kirjoittamiseen. CS-A1150 Tietokannat 15.4.2019 17 / 43

Esimerkki hakemistojen valinnasta, jatkoa Lasketaan eri operaatioille tarvittavat levyhakujen määrät eri hakemistoyhdistelmien vaihtoehdoilla: 1. Ei lainkaan hakemistoja (koko relaatio pitää käydä läpi) 2. Käytössä hakemisto tilausnumeron mukaan (orderno Index) 3. Käytössä hakemisto tuotenumeron mukaan (productno Index) 4. Käytössä molemmat yllä mainitut hakemistot CS-A1150 Tietokannat 15.4.2019 18 / 43

Esimerkki hakemistojen valinnasta, jatkoa Action No Index orderno Index productno Index Both Indexes Q 1 100 4 100 4 Q 2 100 100 31 31 I 2 4 4 6 Average 2 + 98p 1 + 98p 2 4 + 96p 2 4 + 96p 1 + 27p 2 6 2p 1 + 25p 2 Merkinnät: 1. Q 1 kysely, jossa haetaan monikoita, joissa esiintyy haluttu tilausnumero 2. Q 2 kysely, jossa haetaan monikoita, joissa esiintyy haluttu tuote 3. I relaatioon tehtävä lisäys Opimaalinen hakemistoratkaisu riippuu p 1 :n ja p 2 :n arvoista. Laskennassa on tehty yksinkertaistuksia. CS-A1150 Tietokannat 15.4.2019 19 / 43

Huomautuksia Jos haetaan avaimen arvon perusteella ja kyselyt kohdistuvat lähes aina arvoihin, jotka löytyvät relaatiosta, ei ilman hakemistoa tarvitse käydä aina koko relaatiota läpi, vaan voidaan lopettaa, kun ollaan löydetty etsitty arvo. Myös muut seikat voivat vaikuttaa hakemistojen valintaan, esim. osa kyselyistä aikakriittisiä, osa ei. CS-A1150 Tietokannat 15.4.2019 20 / 43

Transaktiot Tarkastellaan erilaisia ongelmatilanteita ja niiltä suojautumista transaktioiden (tapahtumien) avulla. CS-A1150 Tietokannat 15.4.2019 21 / 43

Ongelmatilanne 1 Oletetaan, että pankin tilitiedot on tallennettu relaatioon Accounts(acctNo, balance) Tarkastellaan tilisiirtoa tililtä 286 tilille 354: UPDATE Accounts SET balance = balance 1000 WHERE acctno = 286; UPDATE Accounts SET balance = balance + 1000 WHERE acctno = 354; CS-A1150 Tietokannat 15.4.2019 22 / 43

Ongelmatilanne 1 Oletetaan, että pankin tilitiedot on tallennettu relaatioon Accounts(acctNo, balance) Tarkastellaan tilisiirtoa tililtä 286 tilille 354: UPDATE Accounts SET balance = balance 1000 WHERE acctno = 286; UPDATE Accounts SET balance = balance + 1000 WHERE acctno = 354; Entä, jos ensimmäisen käskyn suorittamisen jälkeen ennen toista käskyä tulee sähkökatko tai laiterikko? CS-A1150 Tietokannat 15.4.2019 22 / 43

Ratkaisu: transaktiot Ohjelmoija määrittelee, että molemmat edellisen kalvon käskyt kuuluvat samaan transaktioon (tapahtumaan, engl. transaction). Tietokannan hallintajärjestelmä pitää huolen siitä, että samaan transaktioon kuuluvat käskyt suoritetaan joko kaikki kokonaan tai yhtäkään niistä ei suoriteta. Tätä transaktioiden ominaisuutta kutsutaan atomisuudeksi (atomicity). CS-A1150 Tietokannat 15.4.2019 23 / 43

Miten tietokannan hallintajärjestelmä huolehtii atomisuudesta? Voiko tietokannan hallintajärjestelmä estää sähkökatkot ja laiterikot? CS-A1150 Tietokannat 15.4.2019 24 / 43

Miten tietokannan hallintajärjestelmä huolehtii atomisuudesta? Voiko tietokannan hallintajärjestelmä estää sähkökatkot ja laiterikot? Ei voi, mutta se voi varmistaa sen, että sähkökatkon tai laiterikon jälkeen tietokanta saadaan takaisin sellaiseen tilaan, jossa joko kaikki transaktioon kuuluvat käskyt on suoritettu tai mitään niistä ei ole tehty. Yleensä tähän käytetään lokia (engl. log), esimerkiksi: Ennen kuin käskyt muuttavat itse relaatioiden monikkoja, tallennetaan lokiin päivitettävien monikoiden attribuuttien vanhat arvot. Loki tallennetaan pysyvään muistiin ennen monikoiden päivittämistä. Jos transaktion suoritus jää kesken, voidaan lokin tietojen avulla palauttaa attribuuttien vanhat arvot. CS-A1150 Tietokannat 15.4.2019 24 / 43

Ongelmatilanne 2 Oletetaan, että lentoyhtiön lentojen paikanvaraustiedot on tallennettu relaatioon Flights(fltNO, fltdate, seatno, seatstatus) Haetaan vapaa paikka halutulle lennolle: SELECT seatno FROM Flights WHERE fltno = AY001 AND fltdate = DATE 2019 05 23 AND seatstatus = available ; Oletetaan, että kysely palautti paikan 35C, jolloin se voidaan varata: UPDATE Flights SET seatstatus = occupied WHERE fltno = AY001 AND fltdate = DATE 2019 05 23 AND seatno = 35C ; CS-A1150 Tietokannat 15.4.2019 25 / 43

Ongelmatilanne 2, jatkoa Entä, jos kaksi käyttäjää yrittää varata lipun samalle lennolle suunnilleen yhtä aikaa? Oletetaan seuraava suoritusjärjestys Käyttäjä 1 huomaa paikan 35C olevan vapaa Käyttäjä 1 varaa paikan 35C Käyttäjä 2 huomaa paikan 35C olevan vapaa Käyttäjä 2 varaa paikan 35C CS-A1150 Tietokannat 15.4.2019 26 / 43

Sarjallistuvuus Vaaditaan, että transaktioiden pitää olla sarjallistuvia (serializable): Jos useita transaktioita suoritetaan samanaikaisesti, pitää niiden vaikutus tietokantaan olla sama kuin jos samat transaktiot olisi suoritettu peräkkäin yksi kerrallaan. Vastaava sarjallinen suoritusjärjestys saa kuitenkin olla mikä tahansa mahdollisista. Jos esim. samanaikaisia transaktioita on T 1 ja T 2, pitää lopputuloksen olla sama kuin jommassa kummassa seuraavista vaihtoehdoista: T 1 suoritetaan kokonaan ennen T 2 :ta T 2 suoritetaan kokonaan ennen T 1 :tä Jos ohjelmoija on määrännyt tiettyjen käskyjen kuuluvan samaan transaktioon, niin tietokannan hallintajärjestelmä pitää huolen eri transaktioiden sarjallistuvuudesta. CS-A1150 Tietokannat 15.4.2019 27 / 43

Sarjallistuvuus Vaaditaan, että transaktioiden pitää olla sarjallistuvia (serializable): Jos useita transaktioita suoritetaan samanaikaisesti, pitää niiden vaikutus tietokantaan olla sama kuin jos samat transaktiot olisi suoritettu peräkkäin yksi kerrallaan. Vastaava sarjallinen suoritusjärjestys saa kuitenkin olla mikä tahansa mahdollisista. Jos esim. samanaikaisia transaktioita on T 1 ja T 2, pitää lopputuloksen olla sama kuin jommassa kummassa seuraavista vaihtoehdoista: T 1 suoritetaan kokonaan ennen T 2 :ta T 2 suoritetaan kokonaan ennen T 1 :tä Jos ohjelmoija on määrännyt tiettyjen käskyjen kuuluvan samaan transaktioon, niin tietokannan hallintajärjestelmä pitää huolen eri transaktioiden sarjallistuvuudesta. Sarjallistuvuudesta voidaan pitää huoli esimerkiksi lukitsemalla transaktioiden käsittelemiä monikoita. CS-A1150 Tietokannat 15.4.2019 27 / 43

Välitehtävä 2 Tarkastellaan transaktioita T 1 ja T 2 T 1 : read(x) X = X + 10 write(x) T2 : read(x) X = X * 1.2 write(x) Oletetaan, että X:n arvo ennen transaktioiden suorittamista on 100. Mitkä ovat mahdollisia X:n arvoja transaktioiden suorittamisen jälkeen, jos transaktioiden suoritus on sarjallistuva? Mitkä olisivat mahdollisia X:n muita arvoja transaktioiden suorittamisen jälkeen, jos transaktioiden suoritus ei olisi sarjallistuva? CS-A1150 Tietokannat 15.4.2019 28 / 43

Huomio sarjallistuvuudesta Sarjallistuvuus ei tarkoita sitä, että transaktiot pitäisi aina suorittaa peräkkäin yksi kerrallaan. Sarjallistuvuus tarkoittaa vain sitä, että lopputuloksen pitää olla sama kuin jos transaktiot olisi suoritettu peräkkäin (jossain järjestyksessä). CS-A1150 Tietokannat 15.4.2019 29 / 43

Ongelmatilanne 3 Lentojen paikanvarausjärjestelmä. Oletetaan, että käyttäjä on varannut paikan 35C ja päivitys on tehty keskusmuistiin haettuun relaation osaan, joka sisältää päivitetyn monikon. Tapahtuu kuitenkin laiterikko tai sähkökatko, ennen kuin keskusmuistiin haettu päivitetty levysivu on tallennettu takaisin kovalevylle. Katoaako käyttäjän tekemä varaus? CS-A1150 Tietokannat 15.4.2019 30 / 43

Pysyvyys Varaus ei katoa, jos ohjelmoija on määritellyt varauksen tekevän ohjelman osan transaktioksi. Tällöin tietokannan hallintajärjestelmä pitää huolen siitä, että onnistuneesti suoritetun transaktion tekemät muutokset jäävät tietokantaan pysyvästi. Yksi transaktioilta vaadittava ominaisuus on pysyvyys (durability). Asiasta voidaan huolehtia esimerkiksi lokin avulla. CS-A1150 Tietokannat 15.4.2019 31 / 43

Ongelmatilanne 4 Tarkastellaan jälleen pankkitietokantaa, ja oletetaan sen sisältävän relaatiot Accounts(acctNo, balance) Loans(loanNo, balance, custid) Customers(custID, name, acctno) Pankki haluaa siivota pois relaatiosta Customers ne asiakkaat, joilla ei ole lainkaan tiliä: DELETE FROM Customers WHERE acctno IS NULL; CS-A1150 Tietokannat 15.4.2019 32 / 43

Ongelmatilanne 4 Tarkastellaan jälleen pankkitietokantaa, ja oletetaan sen sisältävän relaatiot Accounts(acctNo, balance) Loans(loanNo, balance, custid) Customers(custID, name, acctno) Pankki haluaa siivota pois relaatiosta Customers ne asiakkaat, joilla ei ole lainkaan tiliä: DELETE FROM Customers WHERE acctno IS NULL; Tässä saattaa kuitenkin tulla poistetuksi sellainen asiakas, jolla ei ole tiliä, mutta jolla on esimerkiksi 200 000 euron laina. CS-A1150 Tietokannat 15.4.2019 32 / 43

Eheys Transaktioiden pitää toteuttaa eheys-ominaisuus (consistency): jos tietokannassa määritellyt eheysehdot ovat voimassa ennen transaktion suoritusta, niiden pitää olla voimassa myös transaktion suorituksen jälkeen. Oletetaan, että pankkitietokannassa on eheysehto, jonka mukaan Loans-relaation custid-attribuutin arvon pitää löytyä Customers-relaatiosta. Tietokannan hallintajärjestelmä ei salli sellaisia transaktioita, joiden jälkeen tietokannassa määritellyt eheysehdot eivät olisi voimassa. Eheysehtoja voi olla erilaisia. Viite-eheys on vain yksi mahdollisuus. CS-A1150 Tietokannat 15.4.2019 33 / 43

Yhteenveto: transaktioilta vaadittavat ominaisuudet Atomicity (atomisuus): kaikki transaktion sisältämät käskyt suoritetaan tai mitään niistä ei suoriteta. Isolation (serializability, sarjallistuvuus): jos useita transaktioita suoritetaan samanaikaisesti, niin lopputulos on sama kuin jos samat transaktiot olisi suoritettu jossain järjestyksessä peräkkäin yksi kerrallaan. Consistency (eheys): jos tietokannassa määritellyt eheysehdot ovat voimassa ennen transaktion suoritusta, niin ne ovat voimassa myös sen jälkeen. Durability (pysyvyys): Jos transaktio on suoritettu onnistuneesti loppuun (transaktio on sitoutunut), niin sen vaikutukset eivät katoa tietokannasta. Näitä ominaisuuksia kutsutaan usein ACID-ominaisuuksiksi. CS-A1150 Tietokannat 15.4.2019 34 / 43

Transaktion määrittely SQL:ssä Transaktion määrittely SQL:ssä voidaan aloittaa ilmauksella BEGIN TRANSACTION Se ei ole kuitenkaan välttämätön, sillä SQL-standardin mukaan oletuksena ensimmäinen suoritettava SQL-käsky aloittaa uuden transaktion, samoin edellisen transaktion päättymisen jälkeen suoritettava seuraava SQL-käsky. Tämän jälkeen kirjoitetaan transaktioon sisältyvät käskyt Transaktio päätetään joko ilmauksella COMMIT transaktio on suoritettu onnistuneesti; transaktio sitoutuu tai ROLLBACK transaktiota ei voitu suorittaa onnistuneesti, joten sen tekemät muutokset perutaan. CS-A1150 Tietokannat 15.4.2019 35 / 43

Transaktioiden eristyvyystasot Sarjallistuvuus-vaatimuksesta voidaan joustaa, jotta saataisiin enemmän rinnakkaisuutta. Tällöin menetetään osa luettujen arvojen luotettavuudesta. Mahdolliset eristyvyystasot: Read uncommitted (likaisen datan luku sallittu) Read committed (luetaan vain sitoutuneiden transaktioiden kirjoittamaa tietoa) Repeatable read (luvun toistettavuus) Serializable (sarjallistuvuus) CS-A1150 Tietokannat 15.4.2019 36 / 43

Likaisen datan lukeminen Likaisella datalla (dirty data) tarkoitetaan arvoja, joiden kirjoittanut transaktio ei ole sitoutunut (commit). Jos yksi transaktio lukee toisen transaktion kirjoittamaa likaista dataa, on mahdollista, datan kirjoittanut transaktio myöhemmin keskeytyy. Tällöin datan lukenut transaktio toimii sellaisen tiedon pohjalta, jota ei koskaan virallisesti ole ollut tietokannassa. Joissakin sovelluksissa tämä kuitenkin halutaan sallia, koska suorituksen tehokkuutta pidetään tärkeämpänä kuin tietojen täsmällistä oikeellisuutta. Jos transaktiolle halutaan sallia likaiset luvut, määritellään se SQL-käskyllä SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; Tälläkään eristyvyystasolla ei sallita sitä, että transaktio kirjoittaisi toisen transaktion kirjoittaman likaisen datan päälle. CS-A1150 Tietokannat 15.4.2019 37 / 43

Eristyvyystasot: sitoutuneiden luku Voidaan vaatia, että transaktio lukee vain sitoutuneiden transaktioiden kirjoittamaa dataa, mutta se ei silti ole välttämättä täysin sarjallistuva. Jos transaktion eristyvyystasoksi asetetaan READ COMMITTED, se ei lue likaista dataa, mutta jos transaktio lukee saman monikon arvoja useaan kertaan, voi arvo olla lukukertojen välillä vaihtunut, jos jokin toinen transaktio on sitoutunut lukukertojen välillä. Esimerkki: Olkoon määritelty relaatio Students(ID, name, credits) Oletetaan, että transaktio T1 päivittää opiskelijan 11223F opintopistemäärää ja transaktio T 2 lukee saman opiskelijan opintopistemäärän kahteen kertaan. Jos T 1 sitoutuu näiden lukukertojen välissä, niin T 2 lukee eri opintopistemäärät eri lukukerroilla. CS-A1150 Tietokannat 15.4.2019 38 / 43

Eristyvyystasot: luvun toistettavuus Jos transaktion eristyvyystasoksi asetetaan REPEATABLE READ, niin vaaditaan, että jos transaktio lukee saman monikon attribuuttien arvoja useaan kertaan, niin luettu arvo on joka kerralla sama. Edellisen kalvon opintopiste-esimerkissä T 2 lukee tällä eristyvyystasolla joka lukukerralla joko ennen T 1 :n päivitystä olleen opintopistemäärän tai päivityksen jälkeen tallennetun opintopistemäärän, mutta ei yhdellä kerralla yhtä ja toisella kerralla toista. Eristyvyystaso ei kuitenkaan estä sitä, että toinen transaktio lisää käsiteltävään relaatioon uusia monikoita transaktion aikana. Se estää vain niiden monikoiden muuttamisen, jotka transaktio on jo lukenut. CS-A1150 Tietokannat 15.4.2019 39 / 43

Eristyvyystasot: luvun toistettavuus (jatkoa) Esimerkki: T3 laskee Students-relaation opiskelijoiden opintopistemäärän keskiarvon kahteen kertaan. Samaan aikaan toinen transaktio T 4 voi lisätä Students-relaatioon uusia monikoita. T4 :n lisäämien monikoiden vuoksi T 3 :n laskema keskiarvo voi olla jälkimmäisellä kerralla ensimmäisestä kerrasta poikkeava. Monikoita, jotka on lisätty relaatioon T 3 :n eri lukukertojen välillä, kutsutaan haamuiksi (phantoms). CS-A1150 Tietokannat 15.4.2019 40 / 43

Yhteenveto eristyvyystasoista Eristyvyystaso Likaiset luvut Ei-toistettavat Haamut luvut Read uncommitted mahdollinen mahdollinen mahdollinen Read committed ei mahdollinen mahdollinen Repetable read ei ei mahdollinen Serializable ei ei ei SQL-standardissa oletuksena on eristyvyystaso SERIALIZABLE, monissa järjestelmissä se on kuitenkin löysempi (esim. MySQL:ssa REPEATABLE READ, Oraclessa ja PostgresSQL:ssä READ COMMITTED). CS-A1150 Tietokannat 15.4.2019 41 / 43

Huomautus eristyvyystasoista Eristyvyystason määrittely koskee aina sen transaktion lukemia tietoja, jolle taso on määritelty. Jos esim. T 1 :n taso on READ UNCOMMITTED ja T 2 :n taso READ COMMITTED, niin T 1 voi lukea T 2 :n kirjoittamaa likaista dataa, mutta T 2 voi lukea T 1 :n kirjoittamaa dataa vasta sen jälkeen, kun T 1 on sitoutunut. Jotta transaktiojoukon suoritus kokonaisuudessaan olisi varmasti sarjallistuva, pitää jokaisen joukkoon kuuluvan transaktion eristyvyystaso olla SERIALIZABLE. CS-A1150 Tietokannat 15.4.2019 42 / 43

Vain lukuoperaatiota sisältävät transaktiot Jos kaksi tai useampi transaktio ainoastaan lukee tietokannassa olevia arvoja mitään muuttamatta, voi niiden operaatiot lomittua mielivaltaisella tavalla toisiinsa nähden ilman sarjallistuvuusongelmia. Ohjelmoija voi kertoa ennen transaktion aloittamista, että seuraava transaktio sisältää vain lukuoperaatioita ilmauksella: SET TRANSACTION READ ONLY; Vastaavasti voidaan kertoa, että transaktio sisältää myös kirjoitusoperaatioita (oletus muuten, paitsi READ UNCOMMITTED -eristyvyystasolla). SET TRANSACTION READ WRITE; Samalla käskyllä voidaan myös määritellä transaktion eristyvyystaso: SET TRANSACTION READ WRITE ISOLATION LEVEL READ UNCOMMITTED; CS-A1150 Tietokannat 15.4.2019 43 / 43