8.1.2013

Exchange ESE, osa 4


LOOGINEN RAKENNE

JOHDANTO

Exchangen looginen rakenne muodostuu tauluista, sarakkeista ja riveistä (tietueista). ESEUTIL-työkalulla voidaan listata kannassa olevat taulut, mutta ei varsinaisesti niiden sisältöä. Taulujen sarakkeiden tietotyyppejä (siis minkä tyyppistä dataa niihin voidaan tallentaa) on lueteltu ESE Architecture-artikkelissa. Lisäksi parissa esityksessä ja kirjoissa on kuvattu taulujen rakenteita. Koska taulujen rakenteeseen ei ole olemassa virallisesti mitään työkalua, on niiden sisältö jossain määrin tuntematon. Woanware on tehnyt aikoinaan työkalua (EseDbViewer), jolla voi avata EDB-tiedostoja. Nyt sivusto näkyy olevan lopetettu. Tässä artikkelissa käytetyt esimerkit perustuvat juurikin kyseiseen työkaluun. Tosin pitää huomioida, että tässä artikkelissa esitetyt esimerkit eivät välttämättä vastaa todellisuutta, vaan sitä miltä työkalun näkökulmasta näyttäisi asioiden olevan. Tarkoitus on tehdä vertailua lähinnä Exchange 2010 ja 2013 välillä.



Exchange 2003:ssa taulut ovat isoja ja niitä on lukumääräisesti vähemmän. Silloin arkkitehtuurin peruste oli vähäinen tallennustilan käyttö, koska kapasiteetti oli tuolloin erittäin arvokasta. Kääntöpuolena asiassa oli tallennustilan korkean suorituskyvyn vaatimukset. Exchange 2010:n lähtökohtana oli laskea tallennuksen suorituskykytarvetta, jolloin voitaisiin käyttää halvempia ja suurempikapasiteettisia levyjä. Tietokannan rakenteisiin tehtiin merkittäviä muutoksia tavoitteisiin pääsemiseksi. Tauluja pilkottiin pienempiin osiin ja luovuttiin SIS-palvelusta (Single Instance Storage). Nykyinen Exchange 2013 näkyy noudattavan pitkälti samaa linjaa Exchange 2010:n kanssa. Tallennuksen kapasiteetti on tärkeämpi ominaisuus kuin sen optimointi. Suorituskyky tai sen vaatimus ei ole enää merkittävä.

Vilahdus menneisyyteen (Exchange 2003)

Exchange 2003:ssa taulujen määrä on siis pienempi kuin uusimmissa. Tässä muutama esimerkki tauluista.

Mailbox

Jokaisessa tietokannassa on yksi Mailbox-taulu. Sarakkeita taulussa on 48 kpl, joiden otsikot ovat numero/kirjainyhdistelmiä. Joidenkin tietueiden sisällöstä voidaan päätellä otsikkotieto. Sarakkeet ja rivit on käännetty, jotta sisältö mahtuisi alla olevaan taulukkoon. Esimerkkiin on otettu myös sellaisia soluja, joiden merkitystä ei ole tiedossa, eikä niiden sisällöstä voida oikein päätellä mitään.



Yhdessä tietokannassa on kolme järjestelmätason postilaatikkoa:

  • Postilaatikko - SystemMailbox{93BE00CA-BCE0-484F-8C64-8F027DEE7B1C}
  • SMTP (SERVER1-{93BE00CA-BCE0-484F-8C64-8F027DEE7B1C})
  • Mailbox - /O=UC/OU=IT/cn=Configuration/cn=Servers/cn=SERVER1/cn=Microsoft Private MDB

Folders

Jokaisessa tietokannassa on yksi Folders-taulu, jossa sijaitsevat tietokannan kaikkien käyttäjien kaikki postilaatikon kansioiden tiedot. Sarakkeita taulussa on 197 kpl. Kansioita postilaatikolla on lähtötilanteessa 21 kpl. Alla esimerkki.


Sarakkeiden sisältö on merkitty sulkuihin. Tärkeää on huomioida, että sarake Q6764 toimii yhteisenä identiteettinä Mailbox- ja Folders-taulujen välillä.

Msg

Jokaisessa tietokannassa on yksi Msg-taulu, jossa sijaitsevat tietokannan kaikkien käyttäjien viestit. Sarakkeita taulussa on 655 kpl! Viestissä on runko-osa (Body) ja otsikkotiedot (Headers). Alla esimerkki joistakin sarakkeista ja kentistä. Suurin osa soluista on tyhjiä. N67b0 näyttäisi olevan jonkinlainen tunniste, joka viittaisi johonkin postilaatikkoon, mutta tämä on puhdas arvaus. Mainittakoon vielä, että viesti on tallennettu selkokielisenä tauluun. Exchange 2010 ja 2013 sisältö on binäärimuodossa.



Kohti nykyisyyttä (Exchange 2010)

Exchange 2010:ssa taulujen määrä on kasvanut selvästi edeltäjistään. Selkein ero on, että jokaisella postilaatikolla on oma Folders-, MsgHeaders- ja Body-kansionsa. Seuraavassa esimerkkejä Exchange 2010 taulurakenteista postilaatikon näkökulmasta.


Mailbox

Jokaisessa tietokannassa on yksi Mailbox-taulu. Sarakkeita taulussa on 69 kpl, joiden otsikot ovat edelleen numero/kirjainyhdistelmiä. Sisällön perusteella voidaan edelleen päätellä, mistä tiedosta mahtaa olla kyse. Myös Powershell CmdLet:illä ”Get-Mailbox” voidaan saada informaatiota ulos ja tehdä vertailua.


Sarakkeet ja rivit on jälleen käännetty, jotta sisältö mahtuisi alla olevaan taulukkoon. Tietueen solun sisältöjä on kohtuullisen helppo tunnistaa tuosta listasta. L6771 ja L677c selitykset saattavat olla myös toisin päin (Send, Receive). Sarakkeen N6766 arvo on alun perin ollut yhtenä pötkönä, mutta sieltä on helppo tunnistaa postilaatikon kansion tunnisteita. Listassa on ainoastaan osa kansioista, joka on merkille pantavaa. Kuten Exchange 2003:ssa sarake Q6764 merkitsee jonkinlaista kannan sisäistä tunnistetta (Mbx ID).

Lisäksi yhdessä tietokannassa on kolme järjestelmätason postilaatikkoa:

  • /o=UC Demo/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=MAIL/cn=Microsoft Private MDB
  • SystemMailbox{ff367521-5717-4d53-acda-af372b34f0da}
  • Microsoft Exchange (MsExchDiscovery e0dc1c29-89c3-4034-b678-e6c29d823ed9)

Erona Exchange 2003:een on, että SMTP:lle ei ole enää omaa laatikkoa ja lisäksi on tullut Discovery-laatikko.

Folders-1dd1-4208C2

Jokaisella postilaatikolla on oma Folders-taulu, jossa sijaitsevat kansioiden tiedot. Taulun nimi muodostuu ”Folders”-alkuosasta, jota seuraa yksilöllinen tunnisteosa. Tässä tapauksessa ”1dd1-4208C2”. Sarakkeita taulussa on 125 kpl. Itse kansioita on lähtötilanteessa 31 kpl jokaisella postilaatikolla. Alla esimerkki.


Sarakkeiden selitykset on merkitty taulukkoon.


MsgHeader-1dd1-4208C2

Viestien sisältö on jaettu kahteen eri tauluun: MsgHeader-ID ja MsgBody-ID. MsgHeader-taulussa on sarakkeita 155 kpl. Alla esimerkki selvistä tapauksista.


Body-1dd1-4208C2

Body-taulussa on mm. alla olevia tietoja. Sarakkeita on 156 kpl. 



Exchange Server 2013

Exchange 2013 on taulurakenteeltaan samankaltainen edellisen version kanssa. Näkyvin ero on, että lähes kaikkien taulujen sarakeotsikot ovat selkokielellä. Taulujen nimeämisissä on tapahtunut myös muutoksia. Lisäksi uusia tauluja on lisätty. Alla listaus yhden tietokannan tauluista (ESEUTIL /mm). Jokaisella postilaatikolla on uusi tunnisteosa, joka alkaa numerosta ”100”. Alla olevassa listauksessa on kaikki kannan taulut ja ainoastaan yksi postilaatikko (_110) ja siihen liittyvät taulut. Listauksesta on poistettu indeksitaulut, mutta yksi on jätetty esimerkin vuoksi. Merkki ”…” tarkoittaa, että lista jatkuu sadoittain.

Mielenkiintoista on myös huomioida, että kannassa on kahdeksan taulupohjaa (Template), joita käytetään uuden taulun luomisessa. Pohjassa on pelkät saraketiedot. Jokaiselle postilaatikolle luodaan pohjasta uusi instanssi, jonka päätteeksi tulee postilaatikon tunnisteosa. MSysObjects-taulu pitää yhä edelleen tietoa kaikista tietokannan tauluista ja niiden linkityksistä, mutta nuo pohjataulut ovat ikään kuin lisänä. Mallitaulu on toisessa sarakkeessa havainnollisista syistä.


Lähdetään ensin tarkastelemaan postilaatikkotasolta asiaa niin kuin edellisissäkin esimerkeissä. Selkeästi uusi piirre on, että postilaatikkoon liittyviä tauluja on enemmän kuin aiemmin.


Exchange 2013

  • Attachment_110
  • ExtendedPropertyNameMapping_110
  • Folder_110
  • InferenceLog_110
  • Message_110
  • PseudoIndexMaintenance_110
  • ReceiveFolder_110
  • ReplidGuidMap_110
  • Sekä indeksitaulut.

Exchange 2010

  • Folders-1dd1-4208C2
  • MsgHeader-1dd1-4208C2
  • Body-1dd1-4208C2
  • DVU-1dd1-4208C2 (sisältö tuntematon, erilaisia tunnisteita)
  • Sekä indeksitaulut.
Mailbox

Jokaisessa tietokannassa on yksi Mailbox-taulu, jossa sijaitsevat kaikki postilaatikot. Sarakkeita taulussa on 35 kpl eli melkein puolet vähemmän kuin aiemmin. Osa kenttien sisällöstä on niin pitkiä, että ne katkottu ja sulkeisiin on merkitty merkkien määrä.


Vaikka Exchange 2010 vastaavan taulun sisältöä ei kokonaisuudessaan olekaan tiedossa, niin tässä voi todeta, että Mailbox-tauluun tallennettu sisältö on muuttunut. Taulussa ei ole enää sellaisia tietoja kuin Quota, Hide GAL, lista postilaatikon tietyistä kansioista, Last logged on. Yksinkertaistaen Exchange 2010 ympäristössä Mailbox-taulun ja Get-Mailbox-komennon tulos vastasivat enemmän toisiaan. Mielenkiintoista olisi tietää, mihin esim. Quota-asetukset on tallennettu? Aiemmin ne ovat olleet aina Mailbox-taulussa. Tietenkin tuo PropertyBlob voi pitää sisällään mitä vaan.

Lisäksi yhdessä tietokannassa on kahdeksan järjestelmätason postilaatikkoa:

  • SystemMailbox{90debbec-72af-4ea3-8f32-267ce727dd47}
  • Microsoft Exchange
  • Microsoft Exchange
  • HealthMailbox66210498456248be809bbd9ad73ac3d0
  • HealthMailbox27ba3e98669c4560a1b0bede2bb1d338
  • HealthMailbox90debbec72af4ea38f32267ce727dd47
  • Personal Archive - HealthMailbox66210498456248be809bbd9ad73ac3d0
  • Personal Archive - HealthMailbox90debbec72af4ea38f32267ce727dd47
Mailbox Identity

Jokaisessa tietokannassa on uutena tauluna Mailbox Identity. Taulussa on pari sisäistä laskuria, GUID ja linkitys postilaatikon numeroon.



Folder_110

Jokaisella postilaatikolla on oma Folder-taulu, jossa sijaitsevat kansioiden tiedot. Taulun nimi muodostuu ”Folder”-alkuosasta, jota seuraa yksilöllinen tunnisteosa. Tässä tapauksessa ”110”. Sarakkeita taulussa on 52 kpl. Itse kansioita on lähtötilanteessa 41 kpl jokaisella postilaatikolla. Sarakkeita on taas yli puolet vähemmän kuin edellisessä versiossa. Kansioita on tullut 10 kpl lisää.

Alla listaus postilaatikon kaikista kansioista:


Alla esimerkki Inbox-kansion sisällöstä.


Message_110

Jokaisella postilaatikolla on viesteille oma taulunsa. Sarakkeita on 45 kpl. Huomattavaa, että sarakkeita on ainoastaan kolmasosa edellisestä versiosta.


Keskeiset asiat toki löytyvät edelleen, mutta paljon on jäänyt asioita myös pois. Osa tiedoista saattaa olla siirretty noihin binäärikenttiin.


Attachment_110

Liitetiedostoja varten on oma taulunsa, jossa on 21 saraketta.


Yksiselitteisen selkeää Id-inkkiä ei ole viestien ja liitteiden välillä, mutta tunnisteiden alkuosat ovat samanlaiset seuraavasti:
50665ef28815a7409d25017895bfd5a4000000001b8 (alkuosa, joka on sama Message_110 taulun viestin kanssa)

Attachment_110
50665ef28815a7409d25017895bfd5a4000000001b8100000100 (AttachmentId)

Messages_110
50665ef28815a7409d25017895bfd5a4000000001b8200000100 (FolderId)
50665ef28815a7409d25017895bfd5a4000000001b8300000100 (MessageId)
010000001a0050665ef28815a7409d25017895bfd5a4000000001b82000001001a0050665ef28815a7409d25017895bfd5a4000000001b8400000100 (ConversationMembers)

Varsinaista relaatiota ei sinänsä taulujen kentissä tarvitse ollakaan, koska ESE-kanta ei ole relaatiotietokanta. Fyysisten jo loogisten taulujen linkitykset löytyvät MSysObjects-taulusta.

Indeksit

Indeksitaulujen nimet muodostuvat kolmesta osasta, alla esimerkki:
pi1_109_660

Alkuosa on pi + (ainakin) kaksinumeroinen luku. Välissä on postilaatikon tunniste ja lopussa jokin muu tunniste, joka on jonkinlainen juokseva luku (aika). Indeksitauluissa sarakkeilla ei ole nimeä, vaan nimeäminen perustuu kaavaan C1, C10, C11, C2, C3 jne.

Kovin selkeää logiikkaa ei noista indeksitauluista vielä muodostu tai paljastu. Exchange 2010:ssä indeksitaulut olivat selkeitä (kts. ESE fyysinen rakenne).


Testasin käyttäjän Inbox-kansion järjestämistä viiteen eri järjestykseen:

  • Lähettäjä
  • Koko
  • Liite
  • Tärkeys
  • Aika
Tuloksena on, että näistä toimenpiteistä muodostui ainoastaan kaksi indeksitaulua. Ilmeisesti samaa taulua pystytään hyödyntämään useampaa indeksointijärjestystä varten? Taulujen sarakkeita on 28 kpl, mutta tässä muutama esimerkiksi. Taulujen tiedot ovat päällekkäin vertailun helpottamiseksi. Erot on merkitty keltaisella värillä.


MSysObjects

MSysObjects on taulu, joka määrittelee koko tietokannan rakenteen. Vikasietoisuuden varalle on olemassa taulu MsysObjectsShadow (pieni s-kirjain toisena), joka on identtinen MSysObjects-taulun kanssa. Taulussa määritellään myös itse MSysObjects-taulun sisältö. Sitä voitaisiin kutsua taulujen tauluksi. Merkittävä asia on myös se, että taulu yhdistää fyysisellä tasolla olevat puurakenteet loogiseksi kokonaisuudeksi.


ObjidTable määrittelee, mitkä kentät (sarakkeet) kuuluvat samaan tauluun. Otetaan esimerkiksi Mailbox-taulu, jonka tunniste on ”30”, eli nämä muodostavat yhden taulun. Id-kenttä vastaa fyysisen rakenteen objidFDP-arvoa, joka on siis käytännössä B+-puun juurisivu.


Yhteenveto


Viime elokuussa aloitettu kirjoitusprojekti ESE:stä on nyt tässä. Tosiasiassa homma alkoi jo 2012 alkuvuodesta, mutta silloin meni paljon aikaa taulujen tietojen selvittämiseen niiltä osin, kuin se oli mahdollista ja mielekästä. Otsikoiden muuttuminen selkokieliseksi Exchange 2013:ssa helpottaa huomattavasti analysointia. Taulujen rakenteissa on selkeästi tapahtunut muutoksia, se voidaan helposti todeta. Merkittävä muutos on, että tauluihin tallennettavien tietojen määrä on vähentynyt selvästi.


Toki aiemmat tiedot voivat olla binääriobjekteina taulussa, mutta ilmeisesti jonkinlaista karsintaa on tehty sen suhteen, mitä sisältöä tauluihin tallennetaan. Indeksointi ei pienen tarkastelun jälkeen vielä auennut, mutta periaate toki on selvä. Alla yhteenveto taulujen eroista eri versioiden välillä.


Kaiken kaikkiaan tutustuminen on ollut mielenkiintoista ja jopa antoisaa, mutta tästä pidemmälle ei asiassa oikein voi päästä, eikä varsinaisesti tarvitsekaan. Saa nähdä, aikooko Microsoft päivittää artikkelin ”Extensible Storage Engine Architecture” (Exchange 2007, päivitetty 19.11.2008) jossain vaiheessa. Intressit ja resurssit lienevät jo muualla. Niin kuin olen aiemmin jo kirjoittanut, on hyvin todennäköistä, että organisaation omat postijärjestelmät vähenevät tulevina vuosina ja palvelut ostetaan pilvestä. Ja voi olla, että koko sähköpostikulttuurikin hiipuu jossain vaiheessa. Nykypäivän nuoret eivät paljon sähköposteja enää kirjoittele. Sähköpostin käytön ”hiipumisesta” on tästä jonkin verran viitteitä esim. tapaus Atos, joka päätti lopettaa sisäiset postit kokonaan. Eikä varmasti ole ainoa yritys, joka on päätynyt/päätyy tähän ratkaisuun. Joidenkin tutkimusten mukaan (ja aika moni voi sen itsekin todeta) sähköpostia tulee aivan liikaa. Ihmisten aikaa kuluu paljon sähköpostin käsittelyyn. SoMe:n kaltaiset yritysorientoituneet ratkaisut valloittanevat tulevaisuuden viestintäkentän ja sähköposti jää johonkin pienempään rooliin.


Seuraavaksi jotain aivan muuta...

Ei kommentteja:

Lähetä kommentti