SQL PROFILER

Anuncio
SQL PROFILER
El SQL profiler sirve para monitorear SQL. Funciona a través de indicadores que se agregan para ser
registrados.
En este documento se muestra como identificar los procedimientos más frecuentes y los más lentos,
para después poderse concentrar en optimizarlos. Además se comentan contadores que pueden ser
útiles en otros múltiples contextos. Están disponibles plantillas con los conjuntos de contadores que se
nombran. Más adelante se habla de ellas. También es posible cruzar los datos con los logs obtenidos con
perfmon. Se incluye una referencia que muestra como hacerlo.
RECOMENDACIONES DE USO
En esta dirección se encuentra un manual que explica el uso de SQL profiler
http://msdn.microsoft.com/en-us/library/ms187929%28v=SQL.90%29.aspx. Es mejor leerlo al final,
solamente si es necesario.
Se recomienda:


Loguear a un archivo y no a una tabla de sql server. Agrega menos overhead y además después
se puede importar el log (.trc) formado.
Solo capturar los contadores necesarios. Contadores innecesarios degradan el rendimiento y
entorpecen la interpretación de los datos.
PIQUES
Unos piques útiles para tener en cuenta:



Usar plantillas. Las que ya vienen por defecto o hechas por uno mismo. Es más fácil de usar,
más rápido y reduce las chances de errarle.
Incluir las columnas databasename y objectname: sino hay que ir traduciendo los ids. SALVO
que se quiera dejar lo más liviano posible. En ese caso después se hace un join o algo con los
datos para volverlos legibles.
Usar filtros para guardar solamente lo que queremos mirar (por ejemplo solo loguear los sps de
una base de datos en particular, hay un ejemplo en obtener los SP más usados).
MONITOREAR LOS PROCEDIMIENTOS ALMACENADOS
SQL profiler viene con plantillas predefinidas. Las mismas son:
OBTENER LOS SP MÁS USADOS
Como la mayoría de la actividad de nuestras bases se da por medio de stored procedures, nos es muy
útil la primera de estas plantillas para obtener cuales fueron los SP más invocados. Para lograr esto
debemos:
1.
Iniciar una traza en sql profiler con la plantilla SP_Counts(use the template sp_counts). Y
marcar que se guarde en un archivo. Verificar que se incluyan las columnas databaseName y
objectName. Además puede ser muy útil agregar un filtro (con column filter abajo a la derecha)
que especifique una base de datos (por ejemplo: databasename like ‘el nombre de mi base’).
Para ver como se inicia una traza, consultar:
http://msdn.microsoft.com/en-US/library/ms175047%28v=SQL.90%29.aspx
2. Luego de finalizada la captura, volcar los resultados a una tabla de sql server de la siguiente
manera:
SELECT *
INTO <nombre_tabla_traza>
FROM ::fn_trace_gettable('C:\MyTrace.trc', default)
3.
Realizar la siguiente consulta para ver los diez (por ejemplo) SP más invocados de mi tabla de
gestión
SELECT top (10) DatabaseName,ObjectName, count (*)
FROM nombre_tabla_traza
WHERE DatabaseName= <tabla gestion>
GROUP BY DatabaseName,objectName
ORDER BY count(*) DESC
OBTENER LOS SP MÁS L ENTOS
Para identificar los SP que demoran más, hay que agregar a la captura el evento SP:Completed. Para
identificar la duración de las sentencias individuales en cada SP hay que capturar SP:StmtCompleted y
dentro de este evento es muy útil la columna text data que incluye el texto de la sentencia ejecutada.
Adjunto a este documento se encuentra una plantilla (SPLentos) que incluye ambos contadores. No hay
que olvidarse de agregar el filtro por database name como en el punto 1. Para ver como se importa una
plantilla:
http://msdn.microsoft.com/en-us/library/ms177471%28v=SQL.90%29.aspx
OTROS CONTADORES ÚTILES
Conocer todos los contadores disponibles puede ser muy tedioso, en seguida están unos contadores que
pueden ser muy útiles. También se incluye una plantilla con todos estos contadores. Para usar la
plantilla hay que quitar los innecesarios y evaluar si se filtra por databasename como en el ejemplo de
obtener los SP más usados.

Execution Warnings: Si el servidor está muy ocupado, puede que la query espere por recursos.
Este evento informa cuanto demora esta espera, en el caso de ocurrir. Tiene dos posibles
valores:
o "Query Wait" se puede usar para ver que tan seguido una query tiene que esperar.
o "Query Time-Out" se usa para ver con qué frecuencia una query dio time out
esperando por algún recurso.
Si ocurren muy amenudo, se puede considerar: reducir la carga, mejorar el HW, reescribir los
SP o mejorar algún índice.





Hash Warning: Este evento se utliza para medir las recursions de hash y los hash bails. Las
recursiones de hash se dan cuando la tabla de hash (que se usa por ejemplo para un join) no
entra en memoria. Cuando esto sucede, la tabla se parte en varios pedazos que se mapean a
través de una función de hash aplicada sobre los resultados de la función de hash anterior. O
sea, la tabla se parte usando como clave de hash los resultados de la función de hash anterior.
Esto pasa tantas veces como sea necesario (recursivamente) hasta que las tablas entren en la
memoria (hash recursión, evento 0) o hasta que se alcance el máximo de recursiones
preestablecido (hash bail, evento 1). En este último caso, es aún peor ya que la consulta se
termina procesando según un plan alternativo. Si ocurren con frecuencia, la solucion puede
incluir: asegurarse que las estadísticas de los índices están actualizadas, reescribir las consultas,
experimentar para cambiar el query plan.
Missing column statistics: Este evento indica que las estadísticas (sobre las que se basa el
query plan) están desactualizadas para esa consulta, por lo que el query optimizer no evalua las
opciones correctamente. Esto da lugar a planes de ejecución que no son óptimos.
Missing join predicate: avisa que hay un join sin una clausula on (un outer join).
Sort warnings: Avisa que la memoria no es suficiente para albergar los datos que fueron
ordenados.
Scan started: sirve para ver los table e index scan. No es algo malo en sí, pero si hay muchos
puede que falte algún índice o que no se esté usando adecuadamente. Por más información
ver el documento de execution plan.
CORRELACIONAR CON DATOS DE PERFMON
Los datos de una traza de sql profiler se pueden correlacionar con los datos capturados mediante
perfmon (el monitor de rendimiento de windows) para ver cómo se hace:
http://msdn.microsoft.com/en-us/library/ms191152%28v=SQL.90%29.aspx
REFERENCIAS
How to use sql profiler :
http://msdn.microsoft.com/en-us/library/ff650699.aspx#scalenethowto15_topic2
Using the SQL server profiler :
http://www.sql-server-performance.com/tips/sql_server_profiler_tips_p1.aspx
using sql profiler (de microsoft):
http://msdn.microsoft.com/en-us/library/ms187929%28v=SQL.90%29.aspx
Descargar