El otro día estaba leyendo un magnífico artículo sobre cómo correlacionar el monitor de Actividad de Windows (Perfomance Monitor o perfmon), junto con SQL Server Profiler, y he intentado crear un pequeño script que active ambas aplicaciones de forma simultánea.
En primer lugar, nos centramos en el Perfomance Monitor, en el cual hemos creado nuestro recopilador de datos (Data Collector Set) al que hemos llamado XData.
Ejecutando un START.bat de contenido
logman "XData" start
podemos comenzar a recopilar datos.
Un segundo script STOP.bat de contenido
logman "XData" stop
finalizará dicha ejecución.
Si acudimos a la ruta en la que está almacenada la información capturada, podemos ver que ha funcionado correctamente al crearse un archivo de extensión BLG.
Ahora bien, este recopilador de datos se puede exportar en formato XML, ¿como importarlo para poder usarlo en otro equipo? Mediante un tercer script llamado IMPORT.bat y de contenido
logman import XData -s . -xml "C:\rutaexportacion\plantilla_XData.xml"
Un segundo paso es el SQL Server Profiler, en el cual ya hemos creado previamente la plantilla (extensión TDF) deseada.
Para arrancar el Profiler, podemos editar START.bat y añadir la siguiente línea.
C:\rutaprofiler\PROFILER.EXE /S nombreservidor\nombreinstancia /E /T "XData" /O "C:\rutaTrace\fileTrace.trc" /R /Z 32
¿Y cómo parar el seguimiento creado mediante STOP.bat? Aparentemente, no existe forma mediante la combinación COMMANDLINE+GUI de poder parar esa traza cuando deseemos.
Así pues, unido a que en ciertos entornos la carga de usar GUI puede afectar al rendimiento del equipo y, por tanto, a los resultados obtenidos por la traza, tendremos que descargar usar el GUI y usar otro método para hacer una correlación que nos permita pararla con tan sólo "darle a un botón".
Para diseñar esa alternativa, seguiremos algunas de las indicaciones comentadas en este artículo de SqlServerCentral.
Démosle a ese START.bat y dejemos que se cree la traza, la paramos enseguida y exportamos la definición de la traza File | Export | Script Trace Definition | For SQL 2005 & 2008. Ello nos genera un script de extensión SQL, y que llamaremos XDataStartTrace.sql, que sigue este esquema.
/****************************************************/
/* Created by: SQL Server 2008 R2 Profiler */
/* Date: 21/03/2012 00:00:00 */
/****************************************************/
-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @DateTime datetime
set @DateTime = '2012-03-21 00:00:00.000'
set @maxfilesize = 32
-- Please replace the text InsertFileNameHere, with an appropriate
-- filename prefixed by a path, e.g., c:\MyFolder\MyTrace. 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'InsertFileNameHere', @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, 122, 1, @on
--[blablabla]
exec sp_trace_setevent @TraceID, 13, 12, @on
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint
exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 110f7c77-8a36-4269-b10c-e321672274f3'
-- 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
/****************************************************/
/* Created by: SQL Server 2008 R2 Profiler */
/* Date: 21/03/2012 00:00:00 */
/****************************************************/
-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
declare @options integer -- suma de las opciones de comportamiento deseadas
declare @nameOutFile nvarchar(255) --nombre archivo sin extensión
set @options = 6
set @maxfilesize = 32
set @nameOutFile ='XDataTrace_' + convert(varchar, getdate(), 102)+'_'+ replace(convert(varchar, getdate(),14),':','.')
exec @rc = sp_trace_create @TraceID output, @options , @nameOutFile, @maxfilesize, NULL
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, 122, 1, @on
--[blablabla]
exec sp_trace_setevent @TraceID, 13, 12, @on
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint
exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler - 110f7c77-8a36-4269-b10c-e321672274f3'
-- 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
Así, para arrancar este script, tenemos que editar el archivo START.bat de la siguiente forma
logman "XData" start
sqlcmd -E -i "XDataStartTrace.sql" -S nombreservidor\nombreinstancia
Para pararlo, necesitaremos un script XDataStopTrace.sql de contenido
declare @TraceID INT
select @TraceID = TraceID
from :: fn_trace_getinfo(0)
where CAST([value] as nvarchar(255)) like '%XDataTrace%'
if @TraceID IS NOT NULL
begin
print 'Closing Trace ID ' + cast(@TraceID as varchar(5))
exec sp_trace_setstatus @TraceID, 0
exec sp_trace_setstatus @TraceID, 2
end
el cual es llamado desde STOP.bat, cuyo contenido es
logman "XData" stop
sqlcmd -E -i "XDataStopTrace.sql" -S nombreservidor\nombreinstancia
Vamos a probar si esto funciona...
- Creamos el colector de datos mediante IMPORT.bat.
- Ejecutamos START.bat
- A través del Management Studio creamos un script, con contenido
declare @I INT
set@I = 0
print '@I= ' + cast(@I as nvarchar)
while @I < 100000000
begin
insert into myTabla(col2) values (cast(GETDATE() as nvarchar))
set @I = @I + 1
end
- Lo dejamos correr medio minuto, y paramos mediante STOP.bat
- Abrimos Profiler y cargamos la traza creada (archivos de extensión TRC).



No hay comentarios:
Publicar un comentario