SQL Server - Eventos extendidos - trasladar la captura a tabla sql

<<>>
 
Vista:
sin imagen de perfil

Eventos extendidos - trasladar la captura a tabla sql

Publicado por Miguel (4 intervenciones) el 13/05/2024 16:02:35
Buenos días,

Estoy tratando de llevar la información almacenada en ficheros .xel por eventos extendidos de SQL a una tabla en el mismo servidor, de manera tabulada.

Como el proceso demora demasiado traté de efectuar el proceso en lotes con la siguiente consulta, pero el proceso para aproximadamente 1gb, tarda más de 4 horas!!!!

Pueden ser en torno a no más de 200.000 registros....

Tienen alguna recomendación para efectuar este proceso de manera ágil

Gracias a todos y un saludo


DECLARE @BatchSize INT = 10000;
DECLARE @RowCount INT = 1;

WHILE @RowCount > 0
BEGIN
INSERT INTO Test.dbo.Xevents (
event_timestamp, database_name, username, client_hostname, client_app_name, sql_text,
duration, cpu_time, physical_reads, logical_reads, writes, spills, row_count,
last_row_count, line_number, offset, offset_end, statement
, parametrized_plan_handle
)
SELECT TOP (@BatchSize)
CONVERT(xml, event_data).value('(event/@timestamp)[1]', 'smalldatetime') AS event_timestamp,
CONVERT(xml, event_data).value('(event/action[@name="database_name"]/value)[1]', 'nvarchar(max)') AS database_name,
CONVERT(xml, event_data).value('(event/action[@name="username"]/value)[1]', 'nvarchar(max)') AS user_name,
CONVERT(xml, event_data).value('(event/action[@name="client_hostname"]/value)[1]', 'nvarchar(max)') AS client_hostname,
CONVERT(xml, event_data).value('(event/action[@name="client_app_name"]/value)[1]', 'nvarchar(max)') AS client_app_name,
CONVERT(xml, event_data).value('(event/action[@name="sql_text"]/value)[1]', 'nvarchar(max)') AS sql_text,
CONVERT(xml, event_data).value('(event/data[@name="duration"]/value)[1]', 'nvarchar(max)') AS duration,
CONVERT(xml, event_data).value('(event/data[@name="cpu_time"]/value)[1]', 'nvarchar(max)') AS cpu_time,
CONVERT(xml, event_data).value('(event/data[@name="physical_reads"]/value)[1]', 'nvarchar(max)') AS physical_reads,
CONVERT(xml, event_data).value('(event/data[@name="logical_reads"]/value)[1]', 'nvarchar(max)') AS logical_reads,
CONVERT(xml, event_data).value('(event/data[@name="writes"]/value)[1]', 'nvarchar(max)') AS writes,
CONVERT(xml, event_data).value('(event/data[@name="spills"]/value)[1]', 'nvarchar(max)') AS spills,
CONVERT(xml, event_data).value('(event/data[@name="row_count"]/value)[1]', 'nvarchar(max)') AS row_count,
CONVERT(xml, event_data).value('(event/data[@name="last_row_count"]/value)[1]', 'nvarchar(max)') AS last_row_count,
CONVERT(xml, event_data).value('(event/data[@name="line_number"]/value)[1]', 'nvarchar(max)') AS line_number,
CONVERT(xml, event_data).value('(event/data[@name="offset"]/value)[1]', 'nvarchar(max)') AS offset,
CONVERT(xml, event_data).value('(event/data[@name="offset_end"]/value)[1]', 'nvarchar(max)') AS offset_end,
CONVERT(xml, event_data).value('(event/data[@name="statement"]/value)[1]', 'nvarchar(max)') AS statement
, CONVERT(xml, event_data).value('(event/data[@name="parametrized_plan_handle"]/value)[1]', 'nvarchar(max)') AS parametrized_plan_handle
FROM
sys.fn_xe_file_target_read_file(N'c:\sql\Xevents*.xel', NULL, NULL, NULL) AS event_data
WHERE
CONVERT(xml, event_data).value('(event/action[@name="database_name"]/value)[1]', 'nvarchar(max)') NOT IN ('master', 'msdb', 'tempdb', 'model')
AND CONVERT(xml, event_data).value('(event/action[@name="sql_text"]/value)[1]', 'nvarchar(max)') <> 'SELECT 1';
SET @RowCount = @@ROWCOUNT;
END;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder