Azure Sql Db ei ole aivan sama asia kuin Microsoft Sql Server. Yksinkertaistettuna voidaan sanoa, että kyseessä on Sql-pohjainen tietokanta, joka on lohkaistu jossain päin maailmaa toimivasta tietokantapalvelimesta. Tietokanta ei tue kaikkia T-SQL:n komentoja, tietokantojen väliset kyselyt eivät ole sallittuja ja globaalit temp-taulut puuttuvat, joitakin esimerkkejä mainitakseni. Ei mitään hirvittävän vakavaa, mutta kuitenkin sellaisia asioita, jotka kannattaa ottaa huomioon.
Maksaisinko halvimmillaan viisi euroa kuukaudessa toimivasta ja varmistetusta tietokannasta, johon saa turvallisesti yhteyden milloin tahansa ja mistä tahansa?
Kuulostaa niin mielenkiintoiselta, että sitä piti ryhtyä tutkimaan.
Otin pohjaksi kohtalaisen kokoisen tietovaraston, jossa ladataan Data Vault-rakenteiseen Dw:hen 12 miljoonaa riviä. Kaikkinensa sen koko on likimain 10 GB. Ei niin valtavan suuri, mutta testiaineistoksi erittäin sopiva. Pelkästään koon perusteella ei voi sanoa paljonkaan, tässä tapauksessa vain sen, että pienin Basic Tierin tietokanta ei tule kyseeseen, koska sen suurin sallittu koko on vain 2 GB. Muita eri palvelutasojen arvoja voi tutkia vaikkapa seuraavasta kuvasta:
Oleellisin asia näissä kuvissa on tuo DTU, data throughput unit. Microsoft on valinnut sen suhteelliseksi mittariksi kertomaan tietokannan suorituskyvystä. Se on muodostettu mittaamalla tyypillisiä OLAP-tietokannalle ominaisia käyttötapauksia. Koska mittari on suhteellinen, niin voidaan sanoa, että esimerkiksi 100 DTU:n tietokanta on kymmenen kertaa tehokkaampi kuin 10 DTU:lla varustettu tietokanta. Kuulostaa yksinkertaiselta, mutta valitettavasti tämä ei ole koko totuus. Aivan olennaista on ymmärtää oman käyttötapauksen ero verrattuna tuohon Microsoftin määrittelemään tyypilliseen OLAP-tietokannan käyttötapaukseen. Ja tietovarastohan poikkeaa siitä melkoisesti.
Tietovarastolle on tyypillistä suuret kerralla tehtävät luku- ja kirjoitusmäärät sekä toisaalta melko vähäiset transaktiomäärät. On premises-palvelimella voidaan myös pelata palvelimen keskusmuistilla, jolloin hyvän kyselymoottorin caching-ominaisuudet auttavat kokemukseni mukaan todella paljon raskaissa tietovaraston päivitysajoissa. Näitä ominaisuuksia Azure Sql Db ei täysimääräisesti tue.
Itse tutkimuksessa mittasimme aikaa, joka kuluu tyhjän tietovaraston päivityksessä latausalueen tauluista Data Vault-rakenteeseen. Aina yhden kellotuksen jälkeen tietovarasto tyhjennettiin ja vaihdettiin tietokannan Tier toiseen. Tätä latausajan riippuvuutta DTU:sta kuvaa seuraava kuvaaja:
Mittausten jälkeen pystyimme laskemaan Azuren tietovarastolle erilaisia teholukuja, joista havaitsin mielenkiintoiseksi seuraavat:
- ladatut rivit sekunnissa (rows/second)
- ladatut rivit sekunnissa DTU:ta kohti (rows/second/DTU)
- tämä kertoo yhdellä DTU:lla saatavasta tehosta. Teholuku on tärkeä mitata, koska Microsoftin käyttötapaus ei välttämättä vastaa omaa käyttötapaustamme.
- ladatut rivit sekunnissa euroa kohti (rows/second/EUR)
- tämä taas kertoo tehosta, joka rahalla saadaan irti Azuresta. Tämä on myös valaiseva, koska tokihan haluamme tietää maksamamme rahamäärän hyödyn.
Tutkimus sisältää paljon mielenkiintoista dataa, taulukoina ja kuvaajina, mutta tilanpuutteen ja lukijan odotettavissa olevan tylsistymisen vuoksi en julkaise tässä kaikkea.
Tässä lyhyesti oleellisimmat tulokset:
- Parhaan teholuvun sai kallein Premium P11 Tier. Mikä tahansa muu tulos olisikin ollut kummallinen, maksaahan tämä lähes 6000 euroa kuukaudessa.
- Yllättäen teholuku parani eniten Tierien alkupäässä, kalleimman pään portaat vaikuttivat latausnopeuteen ja teholukuun vähiten.
- Todella yllättäen teholuku/DTU oli paras kaikkein halvimmassa Tierissä.
- Samoin teholuku euroa kohti oli paras kaikkein halvimmassa. Tästä voidaan päätellä, että halvimmat kympin ja kahdenkympin tietokannat on todellakin hinnoiteltu sisäänheittotuotteiksi, joten jos niiden teho riittää, niin asiakas tekee kyllä erittäin hyvät kaupat.
Vertailun vuoksi ajoin testin myös On Premises-palvelimella eli omalla pienellä virtuaalipalvelimella, 4 GB:n muistilla. Tämän teho vastasi Premium Tierin P3-tietokantaa, joten tästä voidaan päätellä myös paljon Azuren tämän hetken tietomassojen käsittelykyvystä. Karkeasti sanottuna siis kalleimman luokan Azure Sql Db vastaa mopoluokan Microsoft Sql Serveriä.
Tästä viimeisestä havainnosta ei kuitenkaan kannata lannistua. Azuren yksi hienoimmista ominaisuuksista on se, että sen tehoa voi vaihtaa suhteellisen helposti. Vaihto onnistuu joko hallintaportaalista tai yksinkertaisella PowerShell-skriptillä. Niinpä osaavan tietovaraston rakentajan täytyy ymmärtää myös muuttaa palvelimen tasoa kulloisenkin tarpeen mukaan. Jos tällainen tietovaraston päivitys ajettaisiin todellisessa tilanteessa päivittäin, suosittelisin nostamaan tehot päivityksen ajaksi vaikkapa yöllä tunniksi ylös ja pudottamaan sitten normaalia kyselykäyttöä vastaavalle tasolle loppuajaksi. Eikä niitä edes kannata huippuunsa nostaa, kunhan vain saavuttaa riittävän latausajan, jotta päivitys saadaan kohtuullisessa ajassa tehtyä. Näin kustannukset pysyvät kurissa ja käytössä on aina riittävällä tasolla toimiva palvelin.
Sellainen huomio tässä kannattaa mainita, että tehonmuutoksen yhteydessä kaikki yhteydet tietokantaan katkeavat hetkeksi, mutta uuden yhteydenmuodostuksen jälkeen kaikki toimii taas normaalisti.
Yhteenvetona voidaan todeta, että Azure Sql Db oikein mitoitettuna voi olla monessa tapauksessa järkevä vaihtoehto. Usein se poistaa palvelininvestoinnin kokonaan, mutta kannattaa toki testata tarpeeksi, että oikea kombinaatio löytyy. Ja lopuksi, datamäärien kasvaessa tilannetta kannattaa seurata säännöllisesti.
Jos aihe kiinnostaa enemmän tai haluat lisätietoa tutkimuksesta, autamme Cerionissa mielellämme.