viernes, 18 de octubre de 2013

SP_WHO2 - Estudiando Lentitud en Sql Server

Amigos,

Hay tres análisis básicos que pueden ayudarnos a la hora de estudiar un degradamiento general de nuestra Base de Datos.

A) Estudiar Posibles Bloqueos

B) Analizar Valores Altos de I/O y CPU

C) Relevar Múltiples Procesos con un  mismo SPID, (el spid es el nº que el sql server le da a cada proceso corriendo en el servidor)

  
Para estudiar estos tres puntos vitales de nuestro sistema mi arma favorita es el sp_who2

Este sp muestra todas las sesiones que están actualmente establecidas en el servidor.

La sentencia es sumamente sencilla:

EXEC sp_who2


El resultado ha obtener será el siguiente:



 Los primeros 50 SPID están reservados para procesos del sistema que generalmente no merecen nuestra atención, ya que no suelen ser el origen de la degrdación de la performance del server.

 Ahora los puntos que SI debemos tener en cuenta

 1) Bloqueos

     Existe una columna llamada BlkBy la cual nos informa el SPID que está bloqueando al proceso de la fila que estemos observando.

     Antes de "matar al proceso"  con el comando KILL + SPID,  podemos saber en que consiste el proceso  que está bloqueado. Cómo? Pues simplemente utilizando la sentencia DBCC Inputbuffer (SPID).

      Puede ocurrir que varios procesos estén bloqueados por el mismo SPID, en ese caso conviene estudiar en profundidad el proceso bloqueante


  2) Altos Valores de INPUT/OUPUT y/o CPU
   
    Para esto disponemos de dos columnas "CPUTime" y "DiskIO". Los procesos que demanden mucha lectura/escritura en disco y/ o CPU merecen ser analizados en detalle. Pueden hacerse mejoras de distinto tipo para evitar esta utilización excesiva de los recursos del sistema. (Recomiendo puntualmente analizar en detalle los planes de ejecución para determinar los pasos a seguir)


 3) Procesos Paralelos

    Cuando observamos varias filas destinadas a un mismo SPID tenemos que saber que es una acción que toma el SQL SERVER al estimar que le llevará un largo tiempo resolver el proceso. Cuando esto ocurre el sql server "tira" multiples hilos para el mismo proceso pudiendo tener esto consecuencias muy malas en términos de performance del server.
Una vez más, estudiemos el proceso "responsable" y tratemos de mejorarlo. De ser imposible podemos disminuir el máximo número de procesadores que el paralelismo puede usar. Esto se hace a nivel de servidor (MAXDOP).


 Amigos, eso es todo, espero que el artículo sea de utilidad.

 Saludos.
  
 Otro Post Recomendado por el Autor

 "Mantenimiento de Estadísticas Para una Performance Optima de nuestra BD"

 https://www.blogger.com/blogger.g?blogID=4841087034568585749#editor/target=post;postID=5281491474180357583;onPublishedMenu=allposts;onClosedMenu=allposts;postNum=0;src=postname

10 comentarios: