Categories: SQL Server

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)

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..

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

 

SCRIPT

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

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.

 

Fertig!

Fumus

Share
Published by
Fumus

Recent Posts

SQL Server 2019 – static data masking – Du Opfer!

In SQL Server 2016 wurde das sog. dynamic data masking eingeführt. Eine Möglichkeit Daten bei…

5 Jahren ago

MinRole – Oder wie alles etwas einfacher wird

Seit Sharepoint Server 2007 präsentiert sich die Installation immer auf die gleiche Weise. Gerade mal,…

8 Jahren ago

Schritt für Schritt: SQL 2016 – Dynamic Data Masking

Es weihnachtet! Gerade bekam ich von einer Kollegin Plätzchen angeboten mit der Größe eines Diskus…

8 Jahren ago

Schritt für Schritt: SQL Server 2016 – temporal tables

Nein, bitte nicht verwechseln: temporal tables haben nichts zu tun mit temporary tables table variables…

9 Jahren ago

SQL Server 2016 Schritt für Schritt–Installation und First Look

SQL Server 2016.. habe ich schon erwähnt, dass ich den ziemlich cool finde? Wollen wir…

9 Jahren ago

SQL Server 2016 – CTP2

Nach langer Zeit wieder mal eine Artikel von mir.. der mich besonders erfreut. SQL Server…

9 Jahren ago