Schichtarbeit angesagt – SQL Profiler automatisch starten

Jede Nacht das gleiche Problem. Der SQL Server ist langsam, die Anwendung strauchelt. Aber was ist das Problem? Das Montoring per Perfmon liefert zwar Spitzen, aber nicht den exakten Grund. Ein Fall für den Profiler!

Die Aufgabe des Profiler ist Aktionen wie TSQL Statements, Aufruf von Prozeduren, Logins, ja im Prinzip sogar alles was am SQL Server passiert detailiert aufzuzeichnen.

Ich kann gar nicht oft genug betonen, dass der Profiler extrem ressourcenhungrig ist und je nach Meinung auf dem Server oder eben nicht auf dem Server betrieben werden sollte. Aber defintiv sollte er über einen längeren Zeitraum nicht per Oberfläche gestartert werde. Ein LIvemitschnitt anzuzeigen ist performancetechnisch nahezu pervers!

 

AUFZEICHNUNG

So nun zum automatisieren…

Zuerst bauen wir uns alles zusammen, was man zum Aufzeichnen bzw Analysieren benötigt. Wichtig ist:

  • Angange der Endzeit (sonst wird das Script später nie beendet
  • Dateigröße ( wer will schon viele kleine 5 MB Dateien öffnen
  • Vorlage (Ich würde darauf bestehen, dass folgende Werte enthalten sind: Startzeit, CPU, Reads, Writes, Textdata, Duration, Applicationame, Loginname, dmit ich ungefähr weiss, wer macht was mit meinen SQL Server und was kostet das ganze)

image

FILTERN

Zudem ist es dringend angeraten, das der Profiler nicht wahllos alles aufzeichnet, sondern man nur gezielt, die Dinge aufzeichnet, die entscheidend für eine spätere Analyse sind. Wie etwa ein Filter auf Applicationname oder Databasename usw..

image

Man kann übrigens nur das Filtern, was man auch aufzeichnet Trauriges Smiley

 

SCRIPT

Ist die Aufzeichnung nun fertig, läßt sich per Exportfunktion, das Script erstellen. Zu finden im Dateidialog.

image

Das Script könnte in etwa so aussehen…

/****************************************************/ /* Created by: SQL Server 2012 Profiler */

/* Date: 27/11/2013 09:04:07 */ /****************************************************/ -- Create a Queue declare @rc int declare @TraceID int declare @maxfilesize bigint declare @DateTime datetime /* -- Trace dynamisch bei Start für eine bestimmte Zeit laufen lassen -- declare @DateTime datetime select @datetime = dateadd(hh,2,getdate()) select @DateTime */ set @DateTime = '2013-11-27 10:02:57.000' set @maxfilesize = 100 -- Please replace the text InsertFileNameHere, with an appropriate -- filename prefixed by a path, e.g., c:MyFolderMyTrace. The .trc extension -- will be appended to the filename automatically. If you are writing from -- remote server to local drive, please use UNC path and make sure server has -- write access to your network share exec @rc = sp_trace_create @TraceID output, 0, N'G:LOGSDemotrace', @maxfilesize, @Datetime if (@rc != 0) goto error -- Client side File and Table cannot be scripted -- Set the events declare @on bit set @on = 1 exec sp_trace_setevent @TraceID, 14, 1, @on exec sp_trace_setevent @TraceID, 14, 9, @on …..
exec sp_trace_setevent @TraceID, 13, 14, @on -- Set the Filters declare @intfilter int declare @bigintfilter bigint exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 72204397-8374-4b70-b3ee-1b7c63470134' -- Set the trace status to start exec sp_trace_setstatus @TraceID, 1 -- display trace id for future references select TraceID=@TraceID goto finish error: select ErrorCode=@rc finish: go

Im Script muss man natürlich aufpassen, dass die Endzeit entahlten ist und vor allem dynamisch vergeben wird. Ist die Endzeit nicht enthalten, würde der Agent solange der SQL Server weiterlaufen.. oder die Platte voll ist.

-- Trace dynamisch bei Start für eine bestimmte Zeit laufen lassen 
declare @DateTime datetime
select @datetime = dateadd(hh,2,getdate())
select @DateTime

set @DateTime = '2013-11-27 10:02:57.000'

Übrigens ist es über TSQL möglich mehr Events abzufangen, als die Oberfläche hergibt.

AUFTRAG

Das letzte was wir brauchen ist nun ein Agentauftrag, in dem man das Script einfach mit Copy ‘n Paste reinwirf. Immer daran denken: Der Agent benötigt das Recht auf den Ordner, wo die Datei landen soll.

image

 

Fertig!

Author: Fumus

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert