Vergessene Jobs: msdb sysssislog

Wer sich mit SSIS (SQL Server Integration Services) beschäftigt, kennt die Tabelle dbo.sysssislog. Dort kann man alle möglichen Informationen über den Lauf seiner SSIS-Pakete abspeichern. Die Tabelle dbo.sysssislog ist also kein Job, oder? Warum taucht sie dann in dieser kleinen Serie auf. Zumal in der msdb?

Grundlagen

Schauen wir uns das ganze erst mal wieder an, wobei es nur für die interessant ist, die auch die Datensammlung aktiviert haben.

SELECT COUNT(*) AS Anzahl,
      
MIN(starttime) AS Anfang,
      
MAX(starttime) AS Ende,
      
COUNT(*) / DATEDIFF(DAY, MIN(starttime), MAX(starttime)) Eintraege_pro_Tag
FROM msdb.dbo.sysssislog;

Auf meinem produktiven Server kommen dabei ca. 130.000 Einträge in den letzten 100 Tage zusammen, was sich natürlich auch in der Tabellengröße niederschlägt.

USE msdb;
GO
EXEC sp_spaceused 'dbo.sysssislog';

Damit komme ich auf ca. 130 MB, also mehr als 1 MB pro Tag. Schaut man sich jetzt einmal den Inhalt der Tabelle an, wird man feststellen, dass es wohl ausschließlich Einträge der Datensammlung (Data Collector) sind.

SELECT TOP 100 id, event, computer, operator, source, starttime, endtime, message
FROM
msdb.dbo.sysssislog
ORDER BY id;

Das ist ja schön und gut, dass man hier im Fehlerfall auch mal nachschauen kann, aber dass die Historie vom Zeitpunkt der Installation des Servers an wirklich benötigt wird, bezweifle ich.

Bereinigung

Deshalb habe ich mir einen Job angelegt, der einmal die Woche läuft und die älteren Einträge entsorgt.

USE msdb;
GO
-- Lösche Daten älter als 100 Tage
DELETE FROM dbo.sysssislog
    
WHERE starttime < DATEADD(dd,-100,GETDATE());

Die Laufzeit des Jobs liegt im Sekundenbereich und wir müssen uns nicht mit uralten Einträgen in der Tabelle dbo.sysssislog herumschlagen, wenn wir mal aktuellere Informationen suchen.

Das Vorgehen zum Löschen eigener Protokollierungen in den Benutzerdatenbanken kann ähnlich sein, oder direkt nach dem Lauf eines Pakets erfolgen. In der Regel reicht aber eine Bereinigung am Tag oder einmal in der Woche aus, um den Überblick über die Daten zu behalten.