donderdag 3 december 2009

sysssislog

Vandaag een beetje gespeeld met de logging van ssis. Ik wist niet zeker of ik zelf de logging zou gaan bouwen of dat ik de standaard logging van SSIS ga gebruiken. Ik heb allereerst de logging in de packages ingebouwd. Enorm veel klikken;dank u MS. nadat ik dat gedaan heb ik enkele runs gedaan om te zien wat er in de logging tabel kwam. Ik kan je vertellen dat is enorm veel (als je alle events aanklikt). Ik ben de data gaan analyseren en heb voor mezelf afgevraagd hoe ik de informatie het beste zou willen presenteren:

Package 1 begintijd einddtijd duur
task 1 begintijd einddtijd duur
task 2 begintijd einddtijd duur
Package 2 begintijd einddtijd duur
task 1 begintijd einddtijd duur
task 2 begintijd einddtijd duur

Nou hiervoor heb ik de volgende query gemaakt:



Hieronder in tekstvorm


SELECT
PKG.executionid AS executionid,
PKG.source AS Package,
PKG.PackageStartTime AS PackageStartTime,
PKG.PackageEndTime AS PackageEndTime,
PKG.PackageDurationInSec AS PackageDurationInSec,
TSK.source AS Task,
TaskStartTime AS TaskStartTime,
TaskEndTime AS TaskEndTime,
DATEDIFF(ss,TSK.TaskStartTime, TSK.TaskEndTime) AS TaskDurationInSec
FROM
(SELECT
executionid,
source,
MIN(starttime) AS PackageStartTime,
MAX(endtime) AS PackageEndTime,
DATEDIFF(ss,MIN(starttime), MAX(endtime)) AS PackageDurationInSec
FROM sysssislog
WHERE event IN ('Packagestart', 'PackageEnd') -- Events van een Package.
GROUP BY executionid, source) PKG
INNER JOIN (SELECT
MAX(id) AS id,
executionid,
source,
MIN(starttime) AS TaskStartTime,
MAX(endtime) AS TaskEndTime
FROM sysssislog
WHERE event IN ('OnPreExecute', 'OnPostExecute') -- Events van een task
AND source NOT IN -- Package niet meenemen (is blijkbaar ook een task)
(SELECT source
FROM sysssislog
WHERE event IN ('Packagestart', 'PackageEnd'))
GROUP BY executionid, source) TSK ON PKG.executionid = TSK.executionid
AND PKG.PackageStartTime <= TSK.TaskStartTime AND PKG.PackageEndTime >= TSK.TaskEndTime
ORDER BY id DESC

Al met al ben ik aardig tevreden met het resultaat. Het is niet helemaal perfect omdat de joining op basis van tijd gaat, maar dat gaat wel goed door ook te joinen op executionid. Komende tijd een rapportje op bouwen en een beetje verder testen.

Greetz

Geen opmerkingen:

Een reactie plaatsen