Uso de CPU de SQL Server

Algunas veces se presentan problemas de performance causados por uso excesivo de CPU por parte de SQL Server.
A nivel de sistema operativo, solo se puede saber cuanta CPU consume el servicio de SQL Server, pero no se puede saber que proceso conectado a la base esta causando el problema.

Para resolver la incógnita, nos podemos valer de la "tabla" sysprocesses, que en realidad no es una tabla real que se almacena en disco, sino una estructura en memoria que mantiene información de los procesos que corren dentro de SQL Server. Esta "tabla" es obviamente solo de lectura.

En esta tabla se tiene la CPU consumida por cada proceso que corre dentro de SQL Server (cada conexión a la base).

Simplemente consultar ese dato, no brinda demasiada información, pues es la CPU consumida desde que el proceso se conecto a la base.

Por lo tanto para saber que proceso esta consumiendo mas CPU en un momento dado, la forma es calcular la diferencia de CPU consumida por proceso en un intervalo de tiempo. Cuanto más chico el intervalo, mejor.

Para eso se puede utilizar la siguiente consulta, que se ejecuta desde el Query Analyzer:

select cpu, spid into cpu_usage
from sysprocesses

select diff = p.cpu-u.cpu, p.cpu, p.program_name, p.loginame, p.spid, p.hostname, p.last_batch
from sysprocesses p join cpu_usage u on p.spid=u.spid
order by 1 desc

drop table cpu_usage

La salida de esta consulta es:


Fuente:http://www.concepto.com.uy/petrocsharp/hwnver03.aspx?1,N,0,0,241

Comentarios