Mit SSAS QueryLog in File schreiben

29. Oktober 2010

Das QueryLog ist eine sehr nützliche Funktion des Analysis Servers, besonders wenn man seine Aggregationen Usage-basiert optimieren möchte. Der Usage-Based Aggregation Optimizer arbeitet auf Grundlage einer vom QueryLog erzeugten Datenbanktabelle.

Neben der Standardmöglichkeit, das QueryLog in eine Tabelle des SQL Servers schreiben zu lassen, kann es auch so konfiguriert werden, dass es in ein File loggt. Dafür gibt es das Property "QueryLogFileName" der SSAS Server Instanz. Leider ist in der Version 2005 das Property "QueryLog / QueryLogFileName" über das SQL Server Management Studio nicht sichtbar, d.h. es taucht nicht in der Liste der Properties auf. Es ist aber trotzdem vorhanden und kann gesetzt werden. Nur wie?

Die Lösung ist das direkte Bearbeiten der msmdsrv.ini im Config – Verzeichnis des SSAS Servers (Bei mir ist das C:Program FilesMicrosoft SQL ServerMSSQL.2OLAPConfig). Man öffnet diese Datei mit einem Texteditor – sie ist im XML Format – und sucht nach dem QueryLogFileName – Tag. In dieses trägt man den Namen der Datei ein, in die das QueryLog schreiben soll. Zwei Dinge sind hier zu beachten:

  1. Die Datei muss die Endung .trc haben, da sie das gleiche Format wie ein Profiler Trace-File hat
  2. Die Datei muss in einem Ordner liegen, der zu den AllowedBrowsingFolders gehört

Nun einfach den Analysis Service neu starten und der QueryLog ist aktiviert. An dieser Stelle direkt der Hinweis, dass der Aggregation-Optimizer nicht mit .trc Files arbeiten kann. Warum also überhaupt in Files loggen?

In manchen Fällen ist das Schreiben in eine Datei die einzige Möglichkeit, da vielleicht keine Datenbank zur Verfügung steht, in die man das QueryLog schreiben lassen kann. Der Grund hierfür kann sein, dass das QueryLog serverweit konfiguriert wird, und somit die QueryLogs für alle SSAS Datenbanken auf diesem Server in die gleiche Tabelle geschrieben werden. Das kann in einer anwendungsorientierten Infrastruktur zu Berechtigungsproblemen führen: Welche Anwendung soll das QueryLog hosten, und wie kommen andere Andwendungen auf die entsprechende Datenbanktabelle? Dieses Problem kann man durch ein zentrales Fileshare lösen. Leider muss man in diesem Fall die Daten für die Verwendung mit dem Aggregation Optimization Wizard zunächst aus dem File wieder in eine Tabelle importieren.

Es sei ebenfalls noch erwähnt, dass das QueryLog entweder in eine Datei loggt, oder in eine Datenbanktabelle. Beides gleichzeitig funktioniert nicht.