Kővári AttilaFüggetlen BI tanácsadó, SQL Server [email protected]
Adattárház építése az SQL Server 2005 Integration Services (SSIS)segítségével
Az előadásrólKinek szól az előadás:
Akik már ismerik valamennyire az SSIS-tAkik nem most hallanak először a BI-ról és az adattárházról
Az előadás céljaA legjobb módszerek bemutatásaHogy Önök hatékony ETL folyamatokat valósítsanak meg az SSIS segítségével
TematikaAz SSIS Gyors áttekintéseHatékony ETL folyamat megvalósítása az SSIS segítségévelTeljesítmény-hangolás
Hol tartunk most?
Projekt- tervezés
Projektmenedzsment
Üzl
eti
ig
én
ye
k m
eg
ha
táro
zás
a
Architektúra- tervezés
Eszköz- választás és
telepítés
Fizikai tervezés
Adatbetöltők tervezése és fejlesztése
Felhasználói felület /alk.
tervezés
Felhasználói felület /alk. fejlesztés
Üzembe- helyezés, oktatás
Növekedés
Karbantartás
Dimenzionális modellezés
SSIS áttekintésAdatbetöltő eszköz, a MS ETL eszközeRésze az SQL Server 2005 programcsomagnakGrafikus programozási interfészNem DTS!
TematikaAz SSIS Gyors áttekintéseHatékony ETL folyamat megvalósítása az SSIS segítségévelTeljesítmény-hangolás
Hol tároljuk a package-eket?Adatbázis? Fájl rendszer? SSIS package store?
Érvek a fájlrendszer mellettKönnyebb Source control alá helyezni egy fájlt, mint egy adatbázistKönnyebb fájlt verziózni, mint adatbázistEgyszerűbb menteni és visszaállítani, mint az msdb adatbázistEgyszerűbben betölti a BI Studio az SSIS csomagokat fájlból, mint adatbázisbólHierarchikusan rendezhetjük az SSIS csomagokat
Érvek az adatbázis mellettA napi mentések során SSIS csomagjaink automatikusan mentődnek.
Készítsünk adatforrástól és hardver környezettől független SSIS csomagokat!A minden package által használt beállításokat
tegyük szeparált konfigurációs állományba (pl elérési utak)Minden package ugyanabból a konfigurációs állományból olvassa ki a beállításokat!Hol tároljuk a konfigurációs beállításokat?
XML konfigurációs állomány Környezeti változó Registry bejegyzésHívó package változójábanSQL Server
Best practice: Adatforrásonként, beállításonként egy XML fájl és Windows környezeti változók használata (Indirect XML Configuration file)
Naplózzuk az adattárház eseményeit!
Készítsünk naplót, hogyPontos képet kapjunk betöltési folyamataink eredményérőlStatisztikákat készíthessünkLáthatóvá tegyük, hogy épp melyik folyamat futFuttatandó betöltések (SSIS csomagok, task-ok) szabályozása
Készítsünk háromszintű naplót (Job, Package, Task) lefúrási lehetőséggelA task szintű naplózásra használjuk az SSIS beépített naplózási szolgáltatását (sysdtslog90 tábla)
Auditáljuk a beérkező rekordokat
A Derived column task segítségével könnyen hozzáadhatjuk a beérkező rekordokhoz, hogy
Melyik forrásrendszerből került beMelyik Package töltötteMilyen módon került be (BI Studióból, vagy job-ból? (interactiveMode)Hogy került be? (hibaágon, vagy standard úton)Ki töltötte be?Mikori betöltéssel került be?
Az audit információk megkönnyítik a hibakeresést és a kézi javítást.
Építsünk dinamikus SSIS csomagokat
Egy ismételt betöltés során eldönti a package, hogy kell-e futnia vagy sem. Ne fusson újra, ha egyszer már sikeresen lefutott!Használjunk feltételhez kötött végrehajtást (Expression and Constraint)Napló alapján tárolt eljárás beírja a package változójába, hogy kell e futni vagy nem. A package innen kiolvassa és az annak megfelelő ágon fut.Ne erre használjuk a disable=true beállítást, mert nem erre való!
Építsünk dinamikusan konfigurált csomagokat
Nem tudjuk beégetni az SSIS csomagba, hogy melyik napot kell letöltenie.Paraméterezett lekérdezés, vagy az egész lekérdezés egy paraméter:
Select * from t where datum=?„Select * from t where datum=2007-05-16”
Használjunk paramétert, ha lekérdezésünk hossza meghaladja a 4000 karaktertMinden más esetben készítsük el magunk a teljes lekérdezéstMegj.: A DataFlow task nem konfigurálható át futásidőben, csak a package betöltésekor. (DTS tudta) -> Migration best practice: NE
Készítsünk Template package-et a fejlesztési munka gyorsítására
A Template package tartalmazza:Konfigurációs állományok elérési útjátNaplózási funkciókatGyakran használt task-okat, connection menedzsereket, Standard változókatCsomagok védelmi szintjét
ProtectionLevel=DontSaveSensitive
standard beállításokatTegyünk BreakPoint-ot az package OnPostExecute eseményére
Tegyünk szöveges megjegyzéseket a template package-be -> Mit kell majd átállítani, ha új package készül belőle
A Package-ek legyenek moduláris felépítésűek
1 Package 1 táblát töltsön!Dimenzió táblánként 1 package, ténytáblánként 1 packageKönnyebb fejleszteni, hibát javítani, futtatni, párhuzamosítani
Package-en belül használjunk container-eket
Párhuzamosíthatóak benne a folyamatokEgyszerűbb nem futtatni (disable=true)
Használjunk fő package-eket a dimenziókat és ténytáblákat töltő package-ek összefogására
A Package-ek legyenek moduláris felépítésűek
Hogyan futassuk SSIS csomagjainkat fejlesztés közben?
BI Development stúdióF5 (Start with debugging)Ctrl F5 (Start without debugging)
Parancssor: DTExec.exe (vagy DTExecUI.exe)Performancia teszteléshez használjuk a parancssortTask-ok kikapcsolása: Disable=false (csak debug módban használható)
TematikaAz SSIS Gyors áttekintéseHatékony ETL folyamat megvalósítása az SSIS segítségévelTeljesítmény-hangolás
Az SSIS felépítéseWorkflow engine
Párhuzamos futtatást lehetővé tevő Task-okat, konténereket futtató workflow engineTeljesítménye SSIS szempontjából tekinthető adottságnak (teljesítménye az RDBMS-től, a hálózat sebességétől függ)
Data Flow engieSpeciális runtime task, ami lehetővé teszi a különböző rendszerek közti adatmozgatástKomponensei adatforrások, transzformációs eljárások, céladatbázisokPárhuzamosítható
Teljesítmény-hangolásPárhuzamosítsunk!
Párhuzamosítsunk!Szedjük szét a forrásadatokat
Fájlokat több fájlbaTáblák adatát több szeletre (where feltétellel)
Határozzuk meg, hogy hány folyamat fusson párhuzamosan
Data flown-n kívül (Package-en belül): MaxConcurrentExecutables (-1 = (Logikai) processzorok száma + 2)Data flown-n belül: EngineThreads. Az alapértelmezett 5, ami egy multiprocesszoros gépen megnövelhető (Adatforrásoknak és aszinkron transzformációknak kell egy-egy thread)
Teljesítmény-hangolásIrányelvek
Egyszerre a lehető legtöbb adatot olvassuk be a pipeline-ba
Csak azokat amelyekre tényleg szükség van. Select * = A lehető legkisebb helyigényű adattípust használjuk
Kerüljük a teljes adathalmazon végzett transzformációkat (sort, aggregate) (ha tudjuk)Index: Betöltés szempontjából csak a dimenzió táblákra -> jobb lookup teljesítményHasználjunk SQL Server Destination-t OLE DB helyettTöltsünk üres táblába (Partícionálás)
ÖsszefoglalásÉpítsen hatékony SSIS csomagokat!Ismerje meg alaposan az SSIS architektúrájátPárhuzamosítson!Mérje a teljesítményt (Naplózzon)És használjon egy jól bevált adattárház építési metodológiát!
További információk
Integration Services: Performance Tuning Techniqueshttp://www.microsoft.com/technet/prodtechnol/sql/2005/ssisperf.mspx
Project REAL: Business Intelligence ETL Design Practiceshttp://www.microsoft.com/technet/prodtechnol/sql/2005/realetldp.mspx
Blog bejegyzések:Jammie Thomson, Marco Russo, Alberto Ferrari, Brian Knight írásai
Magyar nyelvű irodalom:http://www.biprojekt.hu