Miért naplózzuk az adattárház betöltését?

Az adattárház betöltésének naplózásakor naplót vezetünk a betöltés során keletkezett minden egyes eseményről. Felírjuk, hogy mikor indult egy folyamat, mikor állt le, mennyi ideig futott, milyen eredménnyel fejeződött be, hány rekordot olvasott be, stb.

Image001

 Tesszük mindezt azért hogy,

  • Pontos képet kapjunk a betöltés közben és végén a betöltés eredményéről
  • Idősoros statisztikákat készítsünk:
    • hol kezdett el növekedni a betöltés időtartama,
    • Melyek azok a folyamatok amelyeknek hatékonyság növelésével jelentősen csökkenthető a betöltés ideje,
    • Egy rekord feldolgozása mennyi ideig tart.
    • Melyek a kritikus folyamatok (amelyek rendszeresen elszállnak valamilyen hiba folytán)
    • Egy adott folyamat meddig futott legutoljára, meddig szokott átlagosan futni, mekkora a szórása, ...
  • És hogy mindezen információkat meg tudjuk osztani az üzemeltetőkkel, kulcsfelhasználókkal
    • E-mail-en keresztül
    • Weboldalon keresztül
  • Lássuk, hogy épp melyik betöltő csomag fut
  • És végül de nem utolsó sorban, hogy adatvezéreltekké tegyük a betöltéseket (egy esetleges újratöltés során ne futtassuk azokat a csomagokat, amelyek korábban már sikeresen lefutottak)

Betöltések gyorsítása: Derived column task bontással

A derived column taszk egy szinkron transzformációt megvalósító egység, így definíció szerint a taszk részfeladatokra történő bontásával nem tudunk párhuzamosítani, hiszen nem fog létrejönni új execution tree, és így minden egy szálon fog futni továbbra is. Na ez így bonyolult, úgyhogy inkább mutatok egy példát.

Tegyük fel, hogy adattárházat töltünk, és minden egyes adattárházba érkező sorthoz hozzáfűzünk két oszlopot. Az egyik tartalmazza, hogy melyik betöltéssel került be a rekord, a másik tartalmazza, hogy melyik forrásrendszerből érkezetett a rekord.

Definíció szerint nem érdemes két taszkban hozzáadni a bejövő rekordokhoz ezen azonosítókat, mert az SSIS nem párhuzamosan, hanem sorosan fogja őket végrehajtani. Ez igaz is. De az SQLCat-osok felfigyeltek arra, hogy egy Execution tree-n belül az SSIS képes egy execution tree-hez több puffert (max 5-öt forrásonként) is allokálni, így végső soron a szinkron transzformációk bontásával egy execution tree-n belül is lehet párhuzamosítani.

Ha tehát az alábbi derived column taszkot

Image001

Felbontjuk 4-5 derived column taszkra,

Image002

Akkor jelentősen, esetenként felére csökkenthető a betöltés időszükséglete. Érdekes.

Akiket érdekelnek a részletek az olvassa el az Increasing Throughput of Pipelines by Splitting Synchronous Transformations into Multiple Tasks című cikket. (De nem árt, ha előtte utánanéz az SSIS architektúrájának)