SQL Server
1K
0

Monitoreando el consumo de CPU en MSSQL usando TSQL

En muchas ocasiones me preguntan si existe alguna consulta la cual nos permite vía línea de comandos TSQL poder monitorear el consumo de CPU en nuestro SQL Server, y la respuesta a esto es SI.

Para poder hacer esto vamos a necesitar usar la DMV sys.dm_os_ring_buffers

Aquí les comparto un código TSQL que usando esta DMV les va a traer el consumo de CPU por minuto.

La dmv solo almacena los últimos 256 minutos con lo cual si quieren tener una historia van a necesitar un proceso que corra esta consulta y la inserte en alguna tabla de ustedes

declare @ts_now bigint 
select @ts_now = ms_ticks from sys.dm_os_sys_info;
with C as
(
select  
dateadd (ms, (y.[timestamp] -@ts_now), GETDATE()) as EventTime,
SQLProcessUtilization, 
SystemIdle, 
100 - SystemIdle - SQLProcessUtilization as OtherProcessUtilization 
from ( 
     select 
	 record.value('(./Record/@id)[1]', 'int') as record_id, 
	 record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int') 
	 as SystemIdle, 
	 record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 
	 'int') as SQLProcessUtilization, 
	 timestamp 

from ( 

select timestamp, convert(xml, record) as record 
from sys.dm_os_ring_buffers 
where ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR' 
and record like '%<SystemHealth>%') as x 
) as y
)
select * 
from c

Resultado

Notas adicionales

Este código es valido para SQL Server, Azure SQL y Azure MI

Tags: cpu, SQL Server
You must be logged in to post a comment.