Probando y Optimizando Procedimientos Almacenados

Probar y optimizar un procedimiento almacenado es una tarea complicada, más aún cuando el procedimiento no lo hemos escrito nosotros.

Un procedimiento almacenado podría ejecutarse muy lentamente, afectando a la aplicación demandante. Las causas son muchas: hardware, memoria, sistema operativo, red, etc.

Podemos empezar realizando una estadística de la ejecución del procedimiento almacenado, detallando ciclos de CPU utilizados, lecturas, escrituras, tiempo de duración, observaciones, etc.

Vamos llevando esos datos mientras realizamos cambios, de modo que podamos tener un control, que cambio afecta o mejora el desempeño del procedimiento.

Antes de hacer las mediciones del desempeño de los procedimientos hay que ejecutar las siguientes comandos en el Analizador de Consultas:


DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

Esto "limpia" los buffers y el cache de Sql Server, de modo que permite un análisis más exacto del rendimiento del procedimiento. Ya el resto depende de quien analice el procedimiento, aunque podemos revisar los siguientes puntos:

  • Evitar crear tablas temporales, sentencias sql dinamicas y joins.
  • Cuidar que la salida del procedimiento almacenado sea la misma que antes de la optimización.
  • Debemos de ver cual es la ejecución de cada sentencia DML.
  • Evitar los Table Scan.
  • Que las sentencias SQL sean escritas en formato ANSI, no ayuda mucho al desempeño, pero si a entenderlas.
Como recomendación, siempre hay que pensar de esta forma: un procedimiento almacenado se puede optimizar para ejecutarse en menos tiempo o para ser de menor tamaño, y no se puede obtener ambos siempre, en el mejor de los casos, hay que decidir que aspecto queremos mejorar.

Como se ve no hay reglas exactas para optimizar procedimientos almacenados, pero si ciertas reglas generales.

2 comentarios:

Luchex dijo...

Hola
¿Puedo hacerte una consulta sobre Visual Basic 6?.
La verdad que ya lo intenté con los foros, y hasta el chat, pero no tengo resultados.
* Tengo un Datagrid DG y un Mshflexgrid MG, el primero menos alto que el segundo.
* Lo que hago es que luego de tener mi DG lleno, pulso un boton para copiar sus datos al MG.
* Todo pasa bien mientras no aparezca la scrollbar vertical en el DG, porque cuando despues quiero hacer el copiado, el MG se "olvida" de los datos de la primera fila del DG.

¿Que puedo hacer?
Gracias

Ikanus dijo...

Hola Luchex, mejor me envias el código de tu procedimiento para copiar esos datos para revisarlo. Más me parece problema de lógica que de código.

Saludos,