Rinnakkaistietokannat



Samankaltaiset tiedostot
Käyttöjärjestelmät: Virtuaalimuisti

Seminaari: Keskusmuistitietokannat. Keskusmuistitietokantojen samanaikaisuuden hallinta Ilkka Pullinen

Johdatus diskreettiin matematiikkaan Harjoitus 7,

Matematiikan tukikurssi

TILASTOLLINEN LAADUNVALVONTA

Lisää segmenttipuusta

monissa laskimissa luvun x käänteisluku saadaan näyttöön painamalla x - näppäintä.

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää

arvostelija NoSQL-tietokannat Joel Sandborg Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Laajan mittakaavan Internet-sovelluksia varten kehitetyt hajautetut tietokannat

Huomaathan, että ohjeessa olevat näytöistä otetut kuvat voivat poiketa sinun koulutuksesi vastaavien sivujen kuvista.

Epäyhtälön molemmille puolille voidaan lisätä sama luku: kaikilla reaaliluvuilla a, b ja c on voimassa a < b a + c < b + c ja a b a + c b + c.

Luonnollisten lukujen laskutoimitusten määrittely Peanon aksioomien pohjalta

String-vertailusta ja Scannerin käytöstä (1/2) String-vertailusta ja Scannerin käytöstä (2/2) Luentoesimerkki 4.1

Tiedon hajauttaminen ja hajautettu kyselynkäsittely

ESTON LASKENTA VERKOSSA

VÄLIMUISTITIETOISET PUSKURIT. Markus Montonen

Lausuntopyyntö STM 2015

Miten korkeakoulujen yhteishaun ja erillishakujen kokonaisuutta tulisi kehittää?

Numeeriset menetelmät

Ratkaisuehdotukset Kesäyliopisto Kuvassa on esitetty erään ravintolan lounasbuffetin kysyntäfunktio.

Kenguru 2016 Mini-Ecolier (2. ja 3. luokka) Ratkaisut

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

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Helsingin yliopisto/ tktl DO Tietokantojen perusteet, s 2000 Relaatioalgebra Harri Laine 1. Relaatioalgebra

SKYPE-RYHMÄN LUOMINEN

2.2 Täydellinen yhtälö. Ratkaisukaava

MAA10 HARJOITUSTEHTÄVIÄ

Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi

Matematiikan tukikurssi 3.4.

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

Induktio kaavan pituuden suhteen

Rinnakkaistietokoneet luento S

Aluksi Kahden muuttujan lineaarinen epäyhtälö

Algoritmit ja tietorakenteet Copyright Hannu Laine. 1, kun n= 0. n*(n-1)!, kun n>0;

Diskreetit rakenteet

Väli- ja loppuraportointi

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

Näkymät ja hakemistot

Oletetaan, että funktio f on määritelty jollakin välillä ]x 0 δ, x 0 + δ[. Sen derivaatta pisteessä x 0 on

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

Dynaamisen järjestelmän siirtofunktio

3. Muuttujat ja operaatiot 3.1

ARVIOINTIPERIAATTEET

Sähköpostiohjeet. Tehokas ja huoleton sähköposti

HELIA 1 (15) Outi Virkki Tiedonhallinta

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Raportointi hankkeen tulosten kuvaajana ja toteutuksen tukena

Lausuntopyyntökysely. Ohjeet:

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

Kulttuuripalvelut, toimintamallien vertailu

Luento 6. June 1, Luento 6

SIS. Vinkkejä Ampèren lain käyttöön laskettaessa magneettikenttiä:

Mielestämme hyvä kannustus ja mukava ilmapiiri on opiskelijalle todella tärkeää.

Helsingin yliopisto/tktl DO Tietokantojen perusteet, s 2000 Johdanto & yleistä Harri Laine 1. Tietokanta. Tiedosto

JOENSUUN SEUDUN HANKINTATOIMI KOMISSIOMALLI

Luento 2: Tiedostot ja tiedon varastointi

Lue ohjeet huolellisesti ennen laitteen käyttöä.

SISÄLLYSLUETTELO. KVALT, :00, Pöytäkirja

Mobiiliturva Palvelun käyttöönotto

Relaatioalgebra. Kyselyt:

Verkkotehtäviin pohjautuva arviointi matematiikan opetuksessa

Perusopetuksen aamu- ja iltapäivätoiminnan laadun arviointi 2016 Västankvarns skola/ Tukiyhdistys Almus ry.

Transaktiot - kertausta

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

TK Palvelinympäristö

Suomen Lions-liitto ry Käyttäjätunnus ja sisäänkirjautuminen MyLCI - Käyttäjäohje Versio

FYYSINEN SUUNNITTELU

Liitosesimerkki. Esim R1 R2 yhteinen attribuutti C. Vaihtoehdot

Solmu 3/2001 Solmu 3/2001. Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä:

Kyselyt: Lähtökohtana joukko lukuja Laskukaava kertoo miten luvuista lasketaan tulos soveltamalla laskentaoperaatioita

Ohje hakulomakkeen täyttämiseen yliopistohaku.fi -palvelussa

Tietokantarakenteet ja -algoritmit 3. harjoitus

Matkahuolto lisäosa WooCommerce alustalle (c) Webbisivut.org

Terveydenhuollon ATK-päivät

ABT 2000kg Haarukkavaunun käyttöohje

Luovia ratkaisuja Erasmus-byrokratian kanssa painimiseen KANSAINVÄLISTEN ASIOIDEN KEVÄTPÄIVÄT , TURKU

Riskienhallinta DTV projektissa. Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Lausuntopyyntökysely. Ohjeet:

Relaatioalgebra. Relaatioalgebra. Relaatioalgebra. Relaatioalgebra - erotus (set difference) Kyselyt:

2.7 Neliöjuuriyhtälö ja -epäyhtälö

Algoritmit 2. Luento 8 Ke Timo Männikkö

LIITTOKOKOUSVAALIT 2016

Dynaaminen optimointi

Relaatiotietokantojen perusteista. Harri Laine Helsingin yliopisto

Lausuntopyyntö STM 2015

Sähköstaattisen potentiaalin laskeminen

Matematiikan tukikurssi

1. a) Laadi suoraviivaisesti kyselyä vastaava optimoimaton kyselypuu.

KUNTIEN ROOLI MUUTOKSESSA Vaikuttamisiltapäivä ja EK-foorumi 3.2.

Molemmille yhteistä asiaa tulee kerralla enemmän opeteltavaa on huomattavasti enemmän kuin englannissa

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen.

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

HE 226/2008 vp. Esityksessä ehdotetaan muutettavaksi työttömyysturvalakia


Matematiikassa ja muuallakin joudutaan usein tekemisiin sellaisten relaatioiden kanssa, joiden lakina on tietyn ominaisuuden samuus.

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Paikallissivuston kumppanin starttipaketti

Antavatko Kelan standardit mahdollisuuden toteuttaa hyvää kuntoutusta työssä uupuneille ja mielenterveysongelmaisille?

Veto-visualisointityökalu

Transkriptio:

Rinnakkaistietokannat A. Silberschatz, H. F. Korth & S. Sudarshan: Database System Concepts. Sixth Edition. McGraw-Hill, 2010; sivut 777 784, luvun 17 (database-system architectures) kohta 17.3 (parallel systems); sivut 797 824, luku 18 (parallel databases); sivut 1169 1171 ja 1178 1180, luvun 28 (Oracle) kohdat 28.3.9 (partitioning) ja 28.4.3 (parallel execution). A. Silberschatz, H. F. Korth & S. Sudarshan: Database System Concepts. Fifth Edition. McGraw-Hill, 2006; sivut 790 797, luvun 20 (database-system architectures) kohta 20.3 (parallel systems); sivut 809 831, luku 21 (parallel databases); sivut 1008 1009 ja 1015 1016, luvun 27 (Oracle) kohdat 27.3.10 (partitioning) ja 27.4.4 (parallel execution). Rinnakkaisjärjestelmät, s. 170. Nopeutuvuus ja mitoittuvuus, s. 173. Rinnakkaistietokanta-arkkitehtuurit, s. 178. Tiedon osittaminen, s. 189. Vinoumien käsittely, s. 194. Kyselyiden välinen ja kyselynsisäinen rinnakkaisuus, s. 200. Operaationsisäinen rinnakkaisuus, s. 204. Rinnakkaisliitos, s. 208. Operaatioiden rinnakkaislaskennan kustannus, s. 213. Operaatioiden välinen rinnakkaisuus, s. 215. Rinnakkaistietokannan kyselynoptimointi, s. 218. Rinnakkaisjärjestelmän suunnittelusta, s. 221. 169

Rinnakkaisjärjestelmät Rinnakkaisjärjestelmä (parallel system) koostuu joukosta yhdelle maantieteellisesti suppealle tallennusalueelle (konehuoneeseen) sijoitetusta joukosta samanaikaisesti toimivia komponentteja: suorittimia, keskusmuisteja ja levyjä. Komponentit kommunikoivat toistensa kanssa kiinteän ja hyvin nopean yhteenkytkentäverkon (interconnection network) välityksellä. Yleisesti käytettyjä yhteenkytkentäverkkoja ovat väyläverkko (bus network), silmukkaverkko (mesh network) ja hyperkuutio (hypercube network). Rinnakkaistietokantajärjestelmiä (parallel database system) on kehitetty sellaisten tietokantasovellusten tarpeisiin, joissa operoidaan tavattoman suuriin, teratavujen (10 12 tavun) kokoisiin tietokantoihin tai joissa on pystyttävä käsittelemään valtava määrä (tuhansia) transaktioita sekunnissa. Tavanomaiset keskitetyt ja asiakas-palvelinjärjestelmät eivät yleensä ole riittävän tehokkaita sellaisiin sovelluksiin. 170

Rinnakkaiskäsittelyssä (parallel processing) useita operaatioita suoritetaan aidosti samanaikaisesti toisin kuin yhden suorittimen tietokoneen osituskäytössä (time sharing). Tietokantaoperaation tai -kyselyn rinnakkaisuuden asteella (degree of parallelism) tarkoitetaan niiden suorittimien lukumäärää, jotka osoitetaan operaation suorittamiseen. Karkearakeinen (coarse-grain) rinnakkaiskone koostuu pienestä määrästä tehokkaita suorittimia. Useimmat tehokäyttöön tarkoitetut koneet tarjoavat jonkinasteista rinnakkaisuutta: kahden tai neljän koneen suorittimet ovat yleisiä. Hienorakeinen (fine-grain) eli massiivisesti rinnakkainen kone käyttää tuhansia pienempiä suorittimia. Useamman sadan suorittimen ja levyn rinnakkaiskoneita on kaupallisesti saatavina. 171

Tietokantajärjestelmän suorituskykyä on perinteisesti mitattu suoritusteholla ja vasteajalla. Suoritusteho (throughput) ilmoittaa, kuinka monta tehtävää (transaktiota) järjestelmä pystyy käsittelemään annetun aikavälin kuluessa (esim. sekunnissa). Vasteaika (response time) tarkoittaa sitä aikaa, joka kuluu tehtävän antamisesta sen suorituksen päättymiseen. Järjestelmä, joka käsittelee suuren määrän pieniä transaktioita, voi parantaa suoritustehoaan käsittelemällä useita transaktioita rinnakkaisesti. Järjestelmä, joka käsittelee suuria transaktioita, voi parantaa sekä vasteaikaa että suoritustehoa suorittamalla transaktioiden alitehtäviä rinnakkaisesti. Erityisesti suoritustehon mittaukseen on 1980-luvun alusta lähtien kehitetty erilaisia tietokantakoetinkuormia (database benchmarks). 172

Nopeutuvuus ja mitoittuvuus Järjestelmän nopeutuvuus (speedup) tarkoittaa annetun tehtävän käsittelyajan pienentymistä, kun rinnakkaisuutta lisätään. Järjestelmän mitoittuvuus (scaleup) tarkoittaa kykyä käsitellä suurempia (tai enemmän) tehtäviä, kun rinnakkaisuutta lisätään. Tarkastellaan rinnakkaisjärjestelmässä ajettavaa tietokantasovellusta. Lisätään järjestelmän kokoa lisäämällä suorittimien, levyjen ynnä muiden järjestelmäkomponenttien määrää. Tavoitteena on käsitellä tehtävä ajassa, joka on kääntäen verrannollinen suorittimien ja levyjen määrään nähden. Olkoon tehtävän käsittelyaika pienemmällä koneella t S ja suuremmalla koneella t L. Rinnakkaisuudesta johtuvaksi nopeutuvuudeksi määritellään t S /t L. 173

Rinnakkaisjärjestelmä on lineaarisesti nopeutuva, jos nopeutuvuus on n, kun suuremman järjestelmän resurssien (keskusyksiköt, levyt ym) määrä on n-kertainen pienempään järjestelmään verrattuna. Jos nopeutuvuus on pienempi kuin n, nopeutuvuuden sanotaan olevan alilineaarinen. Olkoon T tehtävä ja T n sitä n kertaa suurempi tehtävä. Olkoon T :n käsittelyaika pienemmällä koneella t S ja T n :n käsittelyaika n kertaa suuremmalla koneella t n,l. Mitoittuvuudeksi määritellään t S /t n,l. Järjestelmä on lineaarisesti mitoittuva, jos t S = t n,l, ja alilineaarisesti mitoittuva, jos t n,l > t S. 174

Tietokantajärjestelmille voidaan määritellä kaksi erilaista mitoittuvuutta siitä riippuen, miten tehtävän koko mitataan. Erämitoittuvuudessa (batch scaleup) tietokannan koko kasvaa ja sen johdosta kasvaa myös yksittäisten tehtävien käsittelyaika. Esimerkkinä transaktio, joka lukee läpi tietokantarelaation, jonka sivujen määrä on suorassa suhteessa tietokannan kokoon. Tietokannan koko on siis tehtävän koon mittari. Transaktiomitoittuvuudessa (transaction scaleup) järjestelmään tulevien transaktioiden määrä aikayksikköä kohti kasvaa ja tietokannan koko kasvaa samassa tahdissa. Transaktiomitoittuvuus on tärkeää transaktionkäsittelyjärjestelmissä, joissa transaktiot ovat pieniä päivityksiä, esim. tilille panoja tai tililtä ottoja, ja transaktioiden määrä aikayksikköä kohti kasvaa sitä mukaa kuin uusia tilejä perustetaan. Tällainen käsittely soveltuu erikoisen hyvin rinnakkaistettavaksi, sillä transaktiot voivat olla suorituksessa samanaikaisesti ja (pitkälti) toisistaan riippumatta, ja kukin transaktio vie suurin piirtein saman ajan, tietokannan koostakin riippumatta. 175

Mitoittuvuus on yleensä nopeutuvuutta tärkeämpi tehokkuusmittari rinnakkaisille tietokantajärjestelmille. Tavoitteena on varmistaa, että järjestelmä kykenee toimimaan hyväksyttävällä nopeudella silloinkin, kun tietokannan koko ja transaktioiden määrä lisääntyvät. Olemassa olevan järjestelmän kapasiteetin lisääminen on yritykselle usein helpompaa ja halvempaa kuin keskitetyn järjestelmän korvaaminen kokonaan nopeammalla. Toisaalta on tekijöitä, jotka vähentävät rinnakkaistamisesta saatavia hyötyjä: (1) Uuden prosessin käynnistäminen on kallis operaatio; tuhat rinnakkaista prosessia sisältävän operaation käynnistysaika voi olla suurempi kuin varsinainen käsittelyaika. (2) Rinnakkaiset prosessit eivät suinkaan aina ole toisistaan riippumattomia, vaan käsittelevät yhteisiä resursseja (väylä, levyt, tietoalkioiden lukot), mistä aiheutuu odotuksia. 176

(3) Tehtävän jakamisella useampiin rinnakkaisiin osa-askeliin voidaan vähentää keskimääräistä askeleen kokoa, mutta koko tehtävän palveluaika määräytyy hitaimman askeleen mukaan. Tehtävää on usein vaikea jakaa tarkasti samankokoisiin osiin; osien kokojen jakauma voi siis olla vinoutunut (skewed). Jos esimerkiksi 100 yksikön kokoinen tehtävä jaetaan kymmeneen osaan, ja jako on siten vinoutunut, että muutamat osatehtävät ovat pienempiä kuin 10 ja muutamat suurempia kuin 10, joukossa yksi kooltaan 20, niin rinnakkaistamisella saavutettava nopeutuvuus on vain 5 eikä 10. 177

Rinnakkaistietokanta-arkkitehtuurit Rinnakkaiskäsittelyyn kykeneviä tietokonejärjestelmiä on eri tyyppisiä siitä riippuen, mitkä resursseista ovat yhteisiä. Yhteismuistijärjestelmässä (shared-memory system) keskusmuisti on yhteinen kaikkien suorittimien ja levy-yksiköiden kesken muistiväylän tai yhteenkytkentäverkon välityksellä. CPU CPU CPU CPU CPU Muisti Levy Levy Levy 178

Yhteismuistijärjestelmän etuna on suorittimien välisen kommunikoinnin tehokkuus: yhteisessä keskusmuistissa olevaan tietoon pääsee mikä tahansa suoritin käsiksi suoraan, eikä mitään ohjelmallista tiedon siirtoa tarvita. Suoritin voi lähettää viestin muille suorittimille kirjoittamalla keskusmuistipaikan, mikä on huomattavasti nopeampaa kuin viestin lähettäminen kommunikointimekanismin välityksellä. Yhteismuistijärjestelmän heikkoutena on, ettei se mitoutu ylitse 64 suorittimen, sillä muistiväylästä tai yhteysverkosta muodostuu pullonkaula (koska se on yhteinen kaikkien suorittimien kesken). Tietyn rajan jälkeen suorittimien lisääminen järjestelmään ei enää lisää tehokkuutta, sillä suorittimet käyttävät enimmän aikaansa odottaen vuoroaan väylälle päästäkseen muistiin. 179

Yhteismuistijärjestelmässä on jokaisella suorittimella yleensä suuri välimuisti (cache), jotta yhteiseen muistiin viittaukset vältetään mahdollisimman usein. Välimuistien käyttö yhteismuistijärjestelmässä edellyttää välimuistieheyden (cache coherency) ylläpitoa: Jos jokin suoritin kirjoittaa muistipaikkaan, jonka sisältö on parhaillaan myös toisen suorittimen välimuistissa, myös tämä välimuisti täytyy päivittää tai tieto poistaa sieltä. Välimuistieheyden ylläpitorasite lisääntyy suorittimien määrän kasvaessa. Yhteismuistijärjestelmät eivät tästäkään syystä mitoutu ylitse tietyn rajan; 64 suoritinta on maksimi. 180

Yhteislevyjärjestelmässä (shared-disks system, SD system, SD complex) suorittimilla on yksityiset keskusmuistit mutta yhteiset levyt. Kaikki suorittimet voivat lukea ja kirjoittaa kaikkia levyjä yhteenkytkentäverkon välityksellä, mutta suorittimen muistiin pääsee vain kyseinen suoritin yksin. Yhteislevyjärjestelmiä kutsutaan joskus rypäiksi (cluster), esim. Oraclen reaalisovellusryväs (real application cluster). CPU CPU CPU CPU CPU Levy Levy Levy Muisti Muisti Muisti Muisti Muisti 181

Muistiväylä ei yhteislevyjärjestelmässä ole pullonkaula. Yhteislevyjärjestelmä on myös vikasietoinen: jos suorittimessa tai muistissa sattuu häiriö, muut suorittimet voivat ottaa sen tehtäviä suorittaakseen. Koska tietokannan levyversio ja lokilevy ovat kaikkien suorittimien saatavilla, yhden suorittimen romahtaessa toinen suoritin voi huolehtia tietokannan elvytyksestä ja uusien transaktioiden vastaanotosta. Ongelmana yhteislevyjärjestelmässä on edelleen mitoittuvuus: yhteys levyjärjestelmään voi muodostua pullonkaulaksi. Yhteismuistijärjestelmään verrattuna yhteislevyjärjestelmä voi mitoittua jonkin verran suurempaan määrään suorittimia, mutta suorittimien välinen kommunikointi on hitaampaa (koska se tapahtuu yhteenkytkentäverkon välityksellä). 182

Yhteislevyjärjestelmän kukin suoritin puskuroi yhteisen tietokannan sivuja yksityisessä puskurissaan. Koska sama sivu voi samanaikaisesti olla puskuroituna usean eri suorittimen puskurissa, on huolehdittava puskurieheydestä: Kun tietosivu q on puskuroituna suorittimilla P 1 ja P 2, ja suorittimella P 1 suorituksessa oleva transaktio haluaa lukea tai päivittää puskuroimassaan sivun q kopiossa olevan monikon, pitää taata, että monikko kuuluu tietokannan nykytilaan. Yhteiseen lokiin kirjataan eri suorittimilla suoritettavien transaktioiden tuottamia lokikirjauksia. Eri suorittimilla suoritettavat transaktiot varaavat lukkoja yhteisen tietokannan tietoalkioihin. Näistä aiheutuu kommunikointitarvetta eri suorittimien välillä. Samanaikaisuuden hallinta ja häiriöistä elvytys on monimutkaisempaa kuin keskitetyssä (transaktiopalvelin)järjestelmässä. 183

Yksityislevyjärjestelmä (shared-nothing system) eli massiivisesti rinnakkainen järjestelmä (massively-parallel-processing system, MPP system) koostuu itsenäisistä solmuista (node) eli pisteistä (site), joissa kussakin on suoritin, yksityinen keskusmuisti sekä yksi tai useampia yksityisiä levyjä. CPU CPU CPU CPU CPU Muisti Muisti Muisti Muisti Muisti Levy Levy Levy Levy Levy 184

Yksityislevyjärjestelmän solmut ovat yhteydessä toisiinsa nopean yhteenkytkentäverkon välityksellä. Solmu toimii järjestelmän palvelimena solmun omistamien tietojen osalta, so. niiden tietojen osalta, joita säilytetään solmun levyillä. Kaiken levyltä haun ja levylle viennin ei nyt tarvitse kulkea yhteisiä linjoja myöten. Ainoastaan kyselyt, joissa viitataan muihin kuin paikallisiin tietoihin, sekä vastaavat tulosrelaatiot täytyy välittää verkon kautta. Yhteenkytkentäverkko suunnitellaan mitoittuvaksi niin, että sen välityskapasiteetti lisääntyy sitä mukaa kuin järjestelmään lisätään uusia solmuja. Yksityislevyjärjestelmä onkin yhteismuisti- ja yhteislevyjärjestelmiä mitoittuvampi ja siihen voidaan liittää suuri määrä solmuja. 185

Suorittimien välinen kommunikointi sekä tietojen saanti muulta kuin paikalliselta levyltä ovat yksityislevyjärjestelmässä luonnollisesti hitaampia kuin yhteismuisti- tai yhteislevyjärjestelmässä. Jokainen solmu puskuroi vain omilla levyillään pysyvästi säilytettäviä tietokantasivuja, joten puskurieheyden ylläpito-ongelmaa ei ole. Mikäli jokainen solmu voi itsenäisesti suorittaa transaktioita, on kussakin solmussa oma lokilevy, ja solmussa ylläpidetään transaktioiden hallinnan tarvitsemia keskusmuistirakenteita (lukkotaulu, aktiivisten transaktioiden taulu, päivitettyjen sivujen taulu jne). Solmun lokiin kirjataan paikallisilla levyillä sijaitseviin tietokantasivuihin kohdistuneet päivitykset ja solmun lukkotaulussa säilytetään paikallisilla levyillä sijaitseviin tietoalkioihin varattuja lukkoja. Mikäli transaktio voi operoida useammassa eri solmussa sijaitseviin tietoihin, kysymyksessä on hajautettu transaktio, jonka suoritus joudutaan koordinoimaan (esim. kaksivaiheisella sitoutumiskäytännöllä). Tällaisen yksityislevyjärjestelmän hallinnassa käytetäänkin osin samoja menetelmiä kuin hajautetuissa tietokantajärjestelmissä. 186

Hierarkkinen järjestelmä (hierarchical system) yhdistää piirteitä yhteismuisti-, yhteislevy- ja yksityislevyjärjestelmistä. CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU CPU Muisti Muisti Muisti Muisti Levy Levy Levy Levy Levy Levy Levy Levy 187

Ylimmällä tasolla hierarkkinen järjestelmä koostuu yhteenkytkentäverkon yhdistämistä solmuista, joilla ei yhteistä muistia eikä levyä. Ylin taso on siis yksityislevyjärjestelmä. Kukin solmu voisi itse asiassa olla yhteismuistia käyttävä pieni joukko suorittimia. Kukin solmu voisi toisaalta olla yhteislevyjärjestelmä, ja kutakin samaa levyjoukkoa käyttävä järjestelmä yhteismuistijärjestelmä. Järjestelmä voidaan siis rakentaa hierarkiaksi, jonka alimmalla tasolla on muutaman suorittimen yhteismuistijärjestelmiä, keskimmäisellä tasolla yhteislevyjärjestelmiä ja ylimmällä tasolla yksityislevyjärjestelmä. 188

Tiedon osittaminen Levynkäsittelyn rinnakkaistamisessa (I/O parallelism) tietokantarelaation levyltätuontiaikaa ja levyllevientiaikaa pyritään vähentämään osittamalla (partition) relaatio useammalle levylle. Rinnakkaistietokannoissa yleisimmin käytetty tiedonositusmenetelmä on vaakasuora ositus (horizontal partitioning): Relaatio r ositetaan eli hajautetaan (decluster) n:lle levylle D 0,D 1,...,D n 1 yhtä moneen palaseen (fragment) eli osarelaatioon r 0,r 1,...,r n 1 niin, että (1) palanen r i sijoitetaan levylle D i, i = 0,1,...,n 1, (2) r 0 r 1... r n 1 = r ja (3) palaset ovat erillisiä, so. r i r j = /0, kun i j. Ositukseen on kolme perusmenetelmää: kiertovuoro, hajautus ja osavälit. Kiertovuoroon (round-robin) perustuvassa menettelyssä relaatio r luetaan läpi jossakin järjestyksessä ja r:n i:s monikko sijoitetaan levylle D i mod n. Menettely takaa monikoiden tasaisen jakautumisen levyille, ts. kukin levy saa suurin piirtein saman määrän monikoita. 189

Hajautusosituksessa (hash partitioning) jokin relaation r attribuuteista A sovitaan ositusattribuutiksi. Ositusattribuutteja voi olla useampiakin, jolloin ositus perustuu näiden arvokombinaatioon. Määritellään ositusattribuutin A arvojen joukkoon hajautin h, jonka maalijoukko on {0,1,...,n 1}. Relaation r monikko t, jolle h(t[a]) = i, sijoitetaan levylle D i. Osaväliosituksessa (range partitioning) sijoitetaan kullekin levylle relaation r monikot ositusattribuutin A tietyltä arvoväliltä. Ositusattribuutille A valitaan ositusvektori (partitioning vector) [v 0,v 1,...,v n 2 ], jossa v i :t ovat A:n arvojoukkoon kuuluvia arvoja niin että v i < v j aina kun i < j. Relaation r monikko t sijoitetaan (1) levylle D 0, jos t[a] < v 0, (2) levylle D i+1, jos v i t[a] < v i+1, ja (3) levylle D n 1, jos t[a] v n 2. 190

Kun relaatio on ositettu, se voidaan lukea rinnakkaisesti, kukin osa omalta levyltään yhtäaikaa. Vastaavasti relaatiota ositettaessa osat voidaan kirjoittaa levyille samanaikaisesti. Tarkastellaan, miten eri ositusmenetelmät tehostavat erityyppisiä kyselyitä: (1) Koko relaation r tauluselaus (table scan): select from r. (2) Pistekysely (point query), so. relaation r monikon assosiatiivinen haku: select from r where A = a, missä A on (a) ositusattribuutti, (b) muu kuin ositusattribuutti. (3) Osavälikysely (range query), so. relaation r monikoiden haku attribuutin osaväliltä: select from r where A > a 1 and A < a 2, missä A on (a) ositusattribuutti, (b) muu kuin ositusattribuutti. 191

Kiertovuoro-ositus sopii ihanteellisesti kyselyihin, joissa selataan koko relaatio läpi eikä järjestyksellä ole väliä. Relaation selausaika on noin (1/n):s osa relaation selausajasta yhden levyn järjestelmässä. Pistekyselyihin ja osavälikyselyihin menettely sopii huonommin, sillä hakuehdon täyttäviä monikoita joudutaan aina hakemaan jokaiselta levyltä. Hajautusositus sopii parhaiten ositusattribuuttiin perustuviin pistekyselyihin: kysely on tarpeen suorittaa vain yhdelle levylle. Koko relaation selaus voidaan toteuttaa kuten kiertovuoro-ositetulle relaatiolle, mutta selaus ei ole yhtä tehokasta, jos eri levyillä on eri määrä relaation monikoita. Hajautusosituksesta ei ole mitään hyötyä pistekyselyissä, jotka perustuvat muihin kuin ositusattribuuttiin, ei liioin osavälikyselyissä. 192

Osaväliositus sopii hyvin ositusattribuuttiin perustuville piste- ja osavälikyselyille. Tiedon etsintä voidaan rajoittaa niihin levyihin, joiden osavälit leikkaavat kyselyn osavälejä. Tämä piirre on sekä etu että haitta. Etu on, että pienen (so. vähän monikoita sisältävän) osavälin kysely voidaan laskea lähettämällä se vain yhdelle (tai korkeintaan muutamalle) levylle; muita levyjä voidaan käyttää muiden kyselyiden laskemiseen, mikä lisää suoritustehoa ja ylläpitää hyvää vasteaikaa. Jos taas kyselyn osaväli on suuri, joudutaan hakemaan suuri määrä monikoita yhdeltä tai muutamalta levyltä, mikä voi aiheuttaa pullonkaulan kyseisillä levyillä. 193

Vinoumien käsittely Ositettuun tietoon kohdistuvassa kyselynlaskennassa voi esiintyä erilaisia vinoumia (skew). Kun kyselyn laskenta ei ole jakaantunut tasaisesti kaikille levyille, esiintyy suoritusvinouma (execution skew). Kun relaatio ositetaan muulla kuin kiertovuoromenetelmällä, relaation monikoiden jakauma levyille voi olla vino. Tämä voi johtua joko attribuuttiarvovinoumasta tai ositusvinoumasta. Attribuuttiarvovinouma (attribute-value skew) esiintyy, kun relaation ositusattribuutin arvojen jakauma on epätasainen. Hajautusosituksessa ja osaväliosituksessa kaikki tietyllä ositusattribuutin arvolla varustetut monikot joutuvat samalle levylle. Attribuuttiarvovinouma aiheuttaa siis näissä ositusmenetelmissä vinoutta monikoiden jakaumassa levyille. 194

Ositusvinoumalla (partition skew) tarkoitetaan osittamisessa esiintymää kuorman epätasapainoa, kun se ei johdu attribuuttiarvovinoumasta. Osaväliositus on altis paitsi attribuuttiarvovinoumalle myös ositusvinoumalle: ositusvektori on saatettu valita alunpitäen huonosti tai välien koot (so. välien sisältämien monikoiden määrät) poikkeavat päivitysten takia suuresti toisistaan. Ositusvinouma on vähemmän todennäköinen hajautusosituksessa, mikäli hajautin on valittu hyvin. 195

Vinouma on sitä suurempi ongelma, mitä suurempi on rinnakkaisuuden aste. Olkoon 1000 monikon relaatio r ositettu 10 palaseen. Jos ositus on vinoutunut, joissakin palasissa voi olla vähemmän kuin 100 ja joissakin palasissa enemmän kuin 100 monikkoa. Jos yhdessäkin palasessa on 200 monikkoa, relaation selauksessa rinnakkaistuksella saavutettava nopeutuvuus on vain 5 eikä 10. Oletetaan sitten, että sama relaatio r onkin ositettu 100 palaseen. Silloin yhdessä palasessa on keskimäärin 10 monikkoa. Palasten suuren määrän huomioon ottaen on hyvin mahdollista, että jossain palasessa sattuu olemaan 40 monikkoa tai enemmän. Rinnakkaistuksella saavutettava tauluselauksen nopeutuvuus on silloin vain 25 eikä 100. Nopeutuvuudessa siis menetetään vinouman vuoksi sitä enemmän mitä suurempi on rinnakkaisuuden aste. 196

Järjestämällä relaatio voidaan muodostaa tasapainoinen ositusvektori (balanced range-partitioning vector). Olkoon n osituksessa muodostettavien palasten lukumäärä. Relaatio järjestetään ensin ositusattribuutin mukaan. Sitten järjestetty relaatio selataan. Aina kun (1/n):s osa relaatiosta on luettu, seuraavan monikon ositusattribuutin arvo viedään ositusvektoriin. Jos relaatiossa on paha attribuuttiarvovinouma, tuotettu ositus voi yhä olla jonkin verran vino. Pahin haitta on luonnollisesti järjestämisen vaatima ylimääräinen levynkäsittelyaika. 197

Ositusvektorin muodostamisesta koituvaa rasitetta voidaan vähentää muodostamalla relaation r kullekin (tärkeälle) attribuutille A sen arvojakaumaa esittävä histogrammi, jota säilytetään tietokannan tietohakemistossa. Relaation r attribuutin A histogrammi on vektori, jonka i:s alkio sisältää ehdon a i t[a] < a i+1 täyttävien r:n monikoiden lukumääräarvion, kun a i on i:nnen osavälin alaraja ja a i+1 on i:nnen osavälin yläraja. Ositusattribuutin histogrammin avulla on suoraviivaista muodostaa ositusvektori, joka on kutakuinkin tasapainoinen. Jos histogrammia ei ole tallennettu, sille voidaan laskea approksimaatio otannalla, poimimalla monikoita satunnaisesti valitusta osasta relaation tietosivuja. 198

Toinen menettely erityisesti osaväliosituksen vinouman vaikutusten pienentämiseksi on käyttää virtuaalisuorittimia. Virtuaalisuoritin (virtual processor) on näennäinen (looginen) suoritin, joita voi olla usempia osoitettuna samalle todelliselle (fyysiselle) suorittimelle. Virtuaalisuorittimia voi olla monta kertaa enemmän kuin todellisia suorittimia. Ositus- ja laskentamenetelmät osittavat relaation monikot ja laskennan virtuaalisuorittimille. Virtuaalisuorittimet vuorostaan kuvataan todellisille suorittimille, yleensä käyttäen kiertovuoro-ositusta. Ajatuksena on, että vaikka jollakin osavälillä olisi vinouman takia enemmän monikoita kuin muilla osaväleillä, nämä monikot hajaantuvat useammalle virtuaalisuoritinosavälille. Virtuaalisuorittimien kiertovuoro-ositus hajauttaa ylimääräisen työn useampien todellisten suorittimien kesken, jolloin yksittäisen suorittimen ei tarvitse yksinään kantaa koko taakkaa. 199

Kyselyiden välinen ja kyselynsisäinen rinnakkaisuus Kyselyiden välinen rinnakkaisuus (interquery parallelism) tarkoittaa, että eri kyselyitä tai transaktioita suoritetaan samanaikaisesti eri suorittimilla. Transaktionkäsittelyn suoritusteho kasvaa, mutta yksittäisen transaktion vasteaika ei ole sen parempi kuin ajettaessa transaktio yksinään. Kyselyiden välisen rinnakkaisuuden päätarkoituksena onkin mitoittaa transaktionkäsittelyjärjestelmä niin, että se kykenee käsittelemään useampia transaktioita sekunnissa. Kyselyiden välinen rinnakkaisuus on rinnakkaisuuden muodoista se, joka on helpoiten toteutettavissa tietokantajärjestelmässä, erityisesti yhteismuistijärjestelmässä. Yhden suorittimen koneelle suunniteltua tietokantajärjestelmää voidaan käyttää vähäisin muutoksin myös yhteistä keskusmuistia käyttävällä rinnakkaiskoneella, sillä onhan siinä samanaikaisten prosessien hallinta. Transaktiot, jotka osituskäytössä voivat olla samanaikaisesti suorituksessa, voivat yhteismuistijärjestelmässä toimia aidosti rinnakkaisesti. 200

Kyselyiden välinen rinnakkaisuus on vaikeampaa toteuttaa yhteislevyjärjestelmässä ja yksityislevyjärjestelmässä. Suorittimien pitää suorittaa eräitä tehtäviä, kuten lukitus ja lokin hallinta, koordinoidusti, mikä edellyttää viestien vaihtoa. Järjestelmän tulee taata, ettei kaksi suoritinta päivitä samaa tietoa toisistaan riippumatta samaan aikaan. Kun suoritin käsittelee yhteisen tietokannan tietoa yksityisessä puskurissaan, järjestelmän täytyy taata puskurieheys, ts. että suorittimella on puskurissaan tietokantasivun tuore versio. Puskurieheyden ylläpitokäytäntö yleensä integroidaan transaktioiden samanaikaisuuden hallintaan. 201

Kyselynsisäinen rinnakkaisuus (intraquery parallelism) tarkoittaa, että kyselyn yksittäisiä osatehtäviä suoritetaan samanaikaisesti usealla suorittimella ja levyllä. Tarkoituksena on nopeuttaa pitkäkestoisia kyselyitä. Tarkastellaan esimerkkinä kyselyä, jonka laskenta edellyttää relaation r järjestämistä attribuutin A mukaan. Oletetaan, että r on ositettu usealle levylle attribuutin A osaväleihin perustuen. r voidaan silloin järjestää järjestämällä r:n palaset rinnakkaisesti ja katenoimalla järjestetyt palaset. Kysely voidaan siis rinnakkaistaa rinnakkaistamalla sen yksittäisen operaation laskenta silloin, kun operaatio voidaan jakaa osaoperaatioiksi, joiden tuloksista saadaan helposti koko operaation tulos (operaationsisäinen rinnakkaisuus). Useita operaatioita sisältävä kyselysuunnitelma voidaan rinnakkaistaa laskemalla rinnakkaisesti ne operaatiot, jotka eivät riipu toisistaan (operaatioiden välinen rinnakkaisuus). Toisistaan riippuvat kaksi operaatiota voidaan rinnakkaistaa, kun toisen operaation tuottamaa tulosta voidaan putkittaa toisen operaation kuluttamaksi syötteeksi. 202

Seuraavassa tarkastellaan erityyppisten kyselyiden rinnakkaistamista. Kyselyihin ei liity päivityksiä. Algoritmit luonnollisesti riippuvat rinnakkaisjärjestelmän arkkitehtuurista. Algoritmien kuvailussa käytetään kuitenkin yksinomaan yksityislevyjärjestelmää. Ts. kuvataan eksplisiittisesti, milloin tieto pitää siirtää suorittimelta toiselle. Yksityislevyjärjestelmää voidaan simuloida muissa järjestelmissä: tieto voidaan siirtää yhteisen muistin kautta yhteismuistijärjestelmässä ja yhteisten levyjen kautta yhteislevyjärjestelmässä. Yksinkertaisuuden vuoksi oletetaan, että järjestelmässä on n suoritinta, P 0,...,P n 1, ja n levyä, D 0,...,D n 1, missä D i on suorittimeen P i liittyvä levy. Algoritmit ovat helposti yleistettävissä tilanteeseen, jossa suorittimeen liittyy useampia levyjä. 203

Operaationsisäinen rinnakkaisuus Operaationsisäinen rinnakkaisuus (intraoperation parallelism) tarkoittaa, että yksittäistä tietokantaoperaatiota (järjestäminen, valinta, projektio, liitos jne) nopeutetaan jakamalla se rinnakkain suoritettaviksi osaoperaatioiksi. Relaation järjestäminen attribuutin A mukaan voidaan rinnakkaistaa seuraavasti. Oletetaan, että relaatio r on ositettu n:ään palaseen r 0,...,r n 1, missä r i on sijoitettu levylle D i. Mikäli ositus perustuu A:n osaväleihin, r voidaan järjestää rinnakkaisesti kuten edellä on todettu. Jos taas ositus on muunlainen, r voidaan ensin osittaa A:n osaväleihin. 204

Toinen mahdollisuus on rinnakkainen lomitusjärjestäminen (parallel merge sort): 1. Suoritin P i järjestää oman palasensa r i :n, i = 0,...,n 1. 2. Järjestetyt palaset r 0,...,r n 1 lomitetaan. Lomitusvaihe voidaan rinnakkaistaa seuraavasti: 1. Jaetaan A:n arvojoukko m:ään osaväliin jollakin m n. Ositetaan järjestetty palanen r i attribuutin A osavälien mukaan suorittimille P 0,...,P m 1, jokaisella i = 0,...,m 1. Monikot lähetetään järjestyksessä niin, että kukin suoritin P i saa monikot järjestettynä virtana. 2. Kukin suoritin P i lomittaa saamansa monikkovirrat sitä mukaa kuin niitä saapuu. 3. Suorittimilla P 0,...,P m 1 olevat järjestetyt r:n erät katenoidaan. Suoritusvinouman välttämiseksi pitää askeleessa 1 kunkin suorittimen lähettää monikot seuraavasti: Ensin ensimmäinen erä (esim. sivullinen) osavälin 1 monikoita suorittimelle P 1, sitten ensimmäinen erä osavälin 2 monikoita suorittimelle P 2 jne. Sitten toinen erä osavälin 1 monikoita suorittimelle P 1, sitten toinen erä osavälin 2 monikoita suorittimelle P 2 jne. 205

Valinnan σ A=v (r) laskennassa voidaan rajoittua suorittimeen P i, kun r on ositettu attribuutin A mukaan ja arvoa v vastaava r:n palanen on suorittimella P i. Kun relaatio r on ositettu attribuutin A osavälien mukaan, voidaan valinnan σ u A v (r) laskennassa rajoittua niihin suorittimiin, joille sijoitettujen r:n palasten osavälit leikkaavat väliä [u,v]. Muissa tapauksissa valintaoperaatio lasketaan rinnakkaisesti kaikilla niillä suorittimilla, joille r:n palasia on sijoitettu. 206

Kaksoiskappaleiden eliminointi relaatiosta r voidaan toteuttaa rinnakkaisjärjestämistä hyväksi käyttäen. Toinen tapa on osittaa r osaväleihin tai hajauttaen ja eliminoida kaksoiskappaleet rinnakkaisesti. Kaksoiskappaleet säilyttävä projektio π X (r) voidaan toteuttaa lukemalla r:n palasia rinnakkaisesti. Jos kaksoiskappaleet pitää eliminoida, menetellään kuten edellä. Ryhmittely- ja koosteoperaatio select X, f (A) from r group by X voidaan laskea osittamalla relaatio r attribuuttijoukon X mukaan osaväleihin (tai hajauttaen) ja laskemalla suorittimella P i sille osoitetut ryhmät. 207

Rinnakkaisliitos Relaatioiden r ja s liitoksen laskenta voidaan rinnakkaistaa, kun kysymyksessä on yhtäläisyys- tai luonnollinen liitos. Yhtäläisyysliitoksen r A=B s laskenta ositettuna rinnakkaisliitoksena (partitioned parallel join) tapahtuu seuraavasti: 1. Ositetaan r palasiin r 0,...,r n 1 attribuutin A mukaan hajautusositusta (osaväliositusta) käyttäen, missä r i osoitetaan suorittimelle P i. 2. Ositetaan s palasiin s 0,...,s n 1 attribuutin B mukaan hajautusositusta (osaväliositusta) käyttäen, missä s i osoitetaan suorittimelle P i. Askelissa 1 ja 2 käytetään samaa hajautinta (vast. ositusvektoria). 3. Suoritin P i laskee liitoksen q i = r i A=B s i jollakin tavanomaisella liitosmenetelmällä, i = 0,...,n 1. r 0 s 0 r 1 s 1 r r 2 s 2 r 3 s 3 r 4 s 4 s 4. Lopullinen liitos saadaan yhdisteenä q 0 q n 1. 208

Algoritmi luonnollisesti yksinkertaistuu, jos jompikumpi tai molemmat relaatioista r ja s on jo valmiiksi ositettu liitosattribuutin mukaan. Vinouma on erityinen ongelma osaväliositusta käytettäessä, sillä ositus, joka jakaa relaation r yhtä suuriin palasiin, saattaa jakaa relaation s hyvin vaihtelevankokoisiin palasiin. Ositusvektorin pitää olla sellainen, että palasten r i ja s i monikoiden yhteenlaskettu määrä on kutakuinkin sama kaikilla i = 0, 1,..., n 1. Hajautusositus johtaa yleensä pienempään vinoumaan, paitsi silloin, kun liitosattribuutin jollain arvolla on hyvin monta esiintymää. 209

Osittaminen ei sovellu kaikentyyppisiin liitoksiin. Esim. liitoksessa r A<B s on mahdollista, että kaikki r:n monikot liittyvät johonkin s:n monikkoon (tai kääntäen). Ei siis ole mitään helppoa tapaa osittaa r ja s niin, että palasen r i monikot liittyisivät vain palasen s i monikoihin. Tämäntyyppisiä liitoksia r θ s voidaan kuitenkin rinnakkaistaa paloitteluksi ja toisintamiseksi (fragment and replicate) kutsutulla menetelmällä. Tarkastellaan ensin tämän menetelmän erikoistapausta, epäsymmetristä paloittelu- ja toisinnusliitosta (asymmetric fragment-andreplicate join): 1. Ositetaan toinen relaatio, esimerkiksi r, jollakin ositusmenetelmällä, vaikkapa kiertovuoro-osituksella. 2. Toisinnetaan (so. kopioidaan) toinen relaatio, s, kaikille suorittimille. 3. Suoritin P i laskee paikallisesti liitoksen r i θ s jollakin liitosmenetelmällä. r 0 s r 1 s r r 2 s s r 3 s r 4 s 210

Yleinen paloittelu- ja toisinnusliitos (fragment-and-replicate join) toimii seuraavasti: 1. Ositetaan r jollakin menetelmällä n:ään palaseen r 0,...,r n 1. 2. Ositetaan s jollakin menetelmällä m:ään palaseen s 0,...,s m 1. Askelissa 1 ja 2 ei tarvitse käyttää samaa ositusmenetelmää eikä n:n tarvitse olla yhtä suuri kuin m. n ja m pitää kuitenkin valita niin, että käytettävissä on vähintään n m suoritinta. 3. Toisinnetaan palanen r i suorittimille P i, j, j = 0,...,m 1, i = 0,...,n 1. 4. Toisinnetaan palanen s j suorittimille P i, j, i = 0,...,n 1, j = 0,...,m 1. 5. Suorittimella P i, j lasketaan liitos r i θ s j jollakin liitosmenetelmällä. r 0 s 0 r 0 s 1 r 0 s 2 r 0 s 3 r 0 s 4 r 1 s 0 r 1 s 1 r 1 s 2 r 1 s 3 r 1 s 4 r 2 s 0 r 2 s 1 r 2 s 2 r 2 s 3 r 2 s 4 r 3 s 0 r 3 s 1 r 3 s 2 r 3 s 3 r 3 s 4 211

Tarkastellaan liitoksen r A=B s laskemista tapauksessa, että r on valmiiksi ositettu (jollakin menetelmällä) palasiin r 0,...,r n 1 ja että s on paljon pienempi kuin r. Relaation r ositus ei perustu liitosattribuuttiin B. Oletetaan vielä, että palasen r i tallentavalla suorittimella P i on hakemisto palaseen r i liitosattribuutilla A, i = 0,...,n 1. Lasketaan liitos epäsymmetrisenä paloittelu- ja toisinnusliitoksena, jossa relaatio s toisinnetaan ja r:lle käytetään olemassaolevaa ositusta. Jokainen suoritin P j, jolla on relaation s palanen, toisintaa sen kaikille muille suorittimille. Tämän vaiheen jälkeen kaikilla suorittimilla on toisinnettuna koko relaatio s. Nyt jokainen suoritin P i laskee liitoksen s A=B r i hakemistoliitoksena (indexed nested-loop join). Hakemistoliitokset voidaan laskea limittäin s:n palasten toisintamisen kanssa niin, että vältetään s:n monikoiden viemistä levylle. Liitos ja toisintaminen täytyy tahdistaa niin, että jokaisella suorittimella P i on kylliksi keskusmuistitilaa niiden s:n monikoiden säilyttämiseen, joita ei vielä ole käytetty liitoksen s A=B r i laskennassa. 212

Operaatioiden rinnakkaislaskennan kustannus Rinnakkaisuutta saavutetaan osittamalla levynkäsittelyä usealle levylle ja osittamalla keskusmuistikäsittelyä usealle suorittimelle. Jos osittaminen pystytään toteuttamaan aiheuttamatta mitään ylimääräistä rasitetta ja jos työkuorman osituksessa ei esiinny vinoumaa, n:ää suoritinta käyttävä rinnakkaisoperaatio vie vain 1/n-osan siitä ajasta, minkä sama operaatio veisi yhdellä suorittimella. Täytyy kuitenkin ottaa huomioon myös seuraavat lisäkustannukset: (1) Operaation käynnistyskustannus (startup cost), joka koituu operaation käynnistämisestä usealla suorittimella. (2) Vinouma (skew), joka voi esiintyä työkuorman jakelussa prosesssoreille, niin että jotkin suorittimet saavat suuremman työkuorman kuin muut. (3) Kilpailu resursseista (contention for resources), kuten muistista, levystä ja yhteysverkosta, mistä aiheutuu viipeitä. (4) Laskennan lopullisen tuloksen koontikustannus (cost of assembling), mikä sisältää osittaistulosten siirtoja suorittimelta toiselle. 213

Rinnakkaisoperaation viemäksi ajaksi voidaan arvioida T part + T asm + max{t 0,T 1,...,T n 1 }, missä T part on relaatioiden ositusaika, T asm on tuloksen koontiaika ja T i on operaation viemä aika suorittimella P i. Mikäli osittamisessa ei esiinny mitään vinoumaa, kukin suoritin saa 1/n-osan monikoiden kokonaismäärästä. Mikäli kilpailua resursseista ei oteta huomioon, kullakin yksittäisellä suorittimella P i suoritettavien operaatioiden kustannukset voidaan arvioida erikseen. Saatu arvio on optimistinen, sillä työkuorman jakaantuminen suorittimille on usein vino. Vaikka yksittäisen kyselyn osittaminen joukoksi rinnakkaisia osatehtäviä pienentää keskimääräisen tehtävän kokoa, kyselyn laskentaajan määrää hitain osatehtävä. Ositettu rinnakkaislaskenta on vain niin nopea kuin hitain yksittäinen laskenta. 214

Operaatioiden välinen rinnakkaisuus Operaatioiden välinen rinnakkaisuus (interoperation parallelism) tarkoittaa, että kyselyä nopeutetaan suorittamalla kyselysuunnitelman sisältämiä eri operaatioita rinnakkain. Operaatioiden välistä rinnakkaisuutta on kahta lajia: putkitettua rinnakkaisuutta ja riippumatonta rinnakkaisuutta. Putkitetussa rinnakkaisuudessa (pipelined parallelism) operaatiot o 1 ja o 2 ajetaan rinnakkain eri suorittimilla niin, että o 2 kuluttaa monikoita sitä mukaa kuin o 1 tuottaa niitä. Liitoksen r 1 (AB) r 2 (BC) r 3 (CD) r 4 (DE) laskennassa voidaan hyödyntää putkitettua rinnakkaisuutta käyttämällä liitosten vasemmalle syvää laskentajärjestystä ((r 1 r 2 ) r 3 ) r 4 : (1) s 1 = r 1 r 2 suorittimella P 1, (2) s 2 = s 1 r 3 suorittimella P 2 ja (3) s 3 = s 2 r 4 suorittimella P 3. Rinnakkaisuutta saavutetaan luonnollisesti vain, jos käytetään putkitukseen soveltuvaa liitosmenetelmää. 215

Putkitettu rinnakkaisuus on käyttökelpoista pienellä määrällä suorittimia, muttei mitoutu hyvin. Putkiketjut ovat yleensä niin lyhyitä, että rinnakkaisuusaste jää matalaksi. Sellaisia operaatioita (kuten joukkoerotus), jotka voivat tuottaa tulosta vasta kun koko syöte on saatavilla, ei voi putkittaa ollenkaan. Tapauksissa, joissa yhden operaation kustannus on huomattavasti muita korkeampi, putkituksesta saatava nopeutus on marginaalinen. Kun rinnakkaisuusaste on korkea, putkitus on rinnakkaisuuden lähteenä toissijainen tiedon osittamisella saavutettuun rinnakkaisuuteen nähden. Putkituksen tärkein hyöty onkin siinä, että vältytään kirjoittamasta välituloksia levylle. 216

Riippumattomassa rinnakkaisuudessa (independent parallelism) kyselyn operaatiot, jotka eivät riipu toisistaan, suoritetaan rinnakkain. Liitoksen r 1 (AB) r 2 (BC) r 3 (CD) r 4 (DE) laskennassa voidaan hyödyntää riippumatonta rinnakkaisuutta käyttämällä liitosten laskentajärjestystä (r 1 r 2 ) (r 3 r 4 ). Tässä liitokset s 1 = r 1 r 2 ja s 2 = r 3 r 4 voidaan laskea toisistaan riippumattomasti rinnakkain eri suorittimilla: lasketaan s 1 suorittimella P 1 ja s 2 suorittimella P 2. Lopullinen liitos s 3 = s 1 s 2 voidaan laskea suorittimella P 3. s 3 :n laskenta voi toimia rinnakkain s 1 :n ja s 2 :n laskennan kanssa, jos käytetään sopivaa liitosalgoritmia, esim. hajautusliitosta. s 3 :n laskennalle P 3 :ssa putkitetaan s 1 :n laskennan tuottamia monikoita P 1 :stä ja s 2 :n laskennan tuottamia monikoita P 2 :sta. P 3 sijoittaa vastaan ottamiaan monikoita liitosattribuutin C mukaan organisoituun hajautusrakenteeseen, jonka perusteella P 3 voi tuottaa lopulliseen liitokseen s 3 tulevia monikoita. Kuten putkitettu rinnakkaisuus, riippumaton rinnakkaisuuskaan ei yleensä tarjoa korkeaa rinnakkaisuuden astetta. 217

Rinnakkaistietokannan kyselynoptimointi Kyselynoptimointi rinnakkaisjärjestelmässä on monimutkaisempaa kuin peräkkäisjärjestelmässä (so. yhden suorittimen tietokantajärjestelmässä). Kustannusmallit ovat monimutkaisempia, koska osituskustannukset täytyy ottaa huomioon, samoin kuin vinoumat ja suorittimien kilpailu resursseista. Tärkeimpänä uutena ongelmana on kyselyn rinnakkaistamistavan määrääminen. Oletetaan, että kyselylle on jollain tavalla valittu ekvivalenttien relaatiolausekkeiden joukosta lauseke, jonka mukaan kysely on tarkoitus laskea. Tarkastellaan lauseketta operaatiopuuna. Operaatiopuun laskemiseksi rinnakkaisjärjestelmässä operaatiopuulle on luotava ajoitus (scheduling), so. on tehtävä seuraavat päätökset: (1) Miten kukin operaatio rinnakkaistetaan ja kuinka montaa suoritinta operaation laskentaan käytetään? (2) Mitä operaatioita putkitetaan eri suorittimien välillä, mitkä operaatiot suoritetaan rinnakkaisesti toisistaan riippumattomasti ja mitkä operaatiot suoritetaan peräkkäisesti, yksi toisensa jälkeen? 218

Optimointiongelmaan liittyy myös erityyppisten resurssien, kuten suorittimien, levyjen ja muistien, varaaminen kullekin operaatiolle. Saattaa tuntua järkevältä käyttää rinnakkaisuutta hyväksi maksimaalisesti, mutta tietyt operaatiot on syytä toteuttaa peräkkäisesti. Operaatiot, joiden laskentavaatimukset ovat merkittävästi alhaisemmat kuin kommunikoinnista aiheutuva rasite, kannattaa sijoittaa naapuriensa läheisyyteen. Pitkät operaatioputket eivät johda hyvään resurssien käyttöön. Putken viimeinen operaatio saattaa joutua odottamaan pitkään syötettään samalla kun se pitää varattuna kallista resurssia kuten muistia. Rinnakkaisia kyselysuunnitelmia on valittavana paljon suurempi joukko kuin peräkkäisiä kyselysuunnitelmia. Kyselynoptimointi on siis kalliimpaa rinnakkaisjärjestelmässä kuin peräkkäisjärjestelmässä. 219

Vaihtoehtoisia kyselysuunnitelmia on syytä karsia heuristisesti. Eräs heuristiikka on rajoittua sellaisiin kyselysuunnitelmiin, joissa jokainen operaatio rinnakkaistetaan kaikille suorittimille ja joissa ei käytetä lainkaan putkitusta. Parhaan kyselysuunnitelman etsiminen on silloin samanlaista kuin peräkkäisjärjestelmässä. Erona on osituksen suorittamistapa sekä käytettävä kustannusarviointikaava. Toinen heuristiikka on valita ensin tehokkain peräkkäinen kyselysuunnitelma ja sitten rinnakkaistaa sen operaatiot. Kyselynoptimointiin vaikuttaa luonnollisesti myös tietojen fyysinen organisointi (hakemistot jne). 220

Rinnakkaisjärjestelmän suunnittelusta Suurimittaisia rinnakkaisjärjestelmiä käytetään enimmäkseen suurten tietomäärien tallentamiseen kuten tietovarastointiin (data warehousing) sekä tähän tietoon kohdistuvien, yrityksen päätöksentekoa tukevien kyselyiden (decision-support queries) käsittelyyn. Tietovaraston pääasiallisinta käyttötapaa kutsutaan tosiaikaiseksi tiedonjalostukseksi (online analytic processing, OLAP). Tietovarasto saa tietonsa tavallisista operatiivisista tietokannoista (transaktionkäsittelyjärjestelmistä) ja muista informaatiolähteistä aika ajoin tapahtuvissa latauksissa (loading). Rinnakkaislataus (parallel loading) on keino tehostaa suuren tietomäärän latausta tietovarastoon. 221

Kun tietokannan tietomäärä kohoaa teratavuihin, sinänsä yksinkertaiset operaatiot kuten hakemistojen luonti sekä tietokannan kaavion muutokset (esim. attribuutin lisäys relaatioon) voivat viedä hyvin pitkän ajan, useita tunteja tai jopa päiviä. Ei ole suotavaa pitää järjestelmää poissa normaalikäytöstä niin pitkää aikaa. Mainitunlainen tietokannan uudelleenjärjestely (reorganization) pitäisi voida suorittaa tosiaikaisesti (online), normaalin käytön kanssa rinnakkaisesti. Relaation tosiaikaisessa hakemistonluonnissa (online index construction) järjestelmä sallii relaation luku- ja päivitysoperaatioiden suorituksen samanaikaisesti hakemistonluonnin kanssa. Hakemistonluontioperaatio ei siis voi S-lukita koko relaatiota. 222

Suuren rinnakkaistietokantajärjestelmän tulee sietää häiriöitä, joita voi sattua joillakin suorittimilla tai levyillä. Kun suorittimia ja levyjä on monta, yhden suorittimen tai levyn toimintahäiriö on merkittävästi todennäköisempi kuin yhden suorittimen ja yhden levyn järjestelmässä. Huonosti suunniteltu rinnakkaisjärjestelmä lopettaa toimintansa yhdenkin komponentin (suorittimen tai levyn) mentyä epäkuntoon. Olettaen, että yksittäisen suorittimen tai levyn häiriön todennäköisyys on pieni, järjestelmän häiriön todennäköisyys kasvaa lineaarisesti järjestelmän suorittimien ja levyjen lukumäärään nähden. Jos yksittäinen suoritin tai levy joutuu epäkuntoon kerran viidessä vuodessa, niin 100 suorittimen järjestelmässä on häiriö joka 18. päivä. 223

Suurimittaiset rinnakkaistietokantajärjestelmät on suunniteltu toimimaan, vaikka jokin suoritin tai levy joutuisi epäkuntoon. Kaikki tieto toisinnetaan ainakin kahdelle suorittimelle. Järjestelmä pitää kirjaa epäkuntoon joutuneista suorittimista ja jakelee työkuormaa toimivien suorittimien kesken. Epäkuntoon joutuneessa pisteessä tallennettuun tietoon kohdistuvat kyselyt reititetään automaattisesti sille etävarmistuspisteelle (backup site), jossa tieto on toisinnettuna. Jos romahtaneen suorittimen P kaikki tieto on toisinnettuna ainoastaan suorittimelle P, joutuu P käsittelemään omien kyselyidensä lisäksi myös P:n kyselyt, mikä tekee P :sta pullonkaulan. Yhden suorittimen tallentamat tiedot onkin syytä toisintaa useammalle muulle suorittimelle. 224