2008-08-18 17 views
9

Estamos teniendo esporádicos tiempos de espera de consultas aleatorias en nuestro clúster de SQL Server 2005. Tengo algunas aplicaciones que lo usan, entonces estoy ayudando en la investigación. Al ver el% de tiempo de CPU en Perfmon normal, ciertamente puede verlo salirse. Sin embargo, el monitor de actividad de SQL solo proporciona el tiempo acumulativo de CPU e IO utilizado por un proceso, no lo que está utilizando en ese momento, o en un marco de tiempo específico. Tal vez podría usar el generador de perfiles y ejecutar un seguimiento, pero este grupo es muy utilizado y me temo que estaría buscando una aguja en un pajar. ¿Estoy ladrando el árbol equivocado?Identificación de problemas de rendimiento de SQL Server

¿Alguien tiene algunos buenos métodos para rastrear consultas/procesos costosos en este entorno?

Respuesta

12

Esto le dará los 50 mejores declaraciones de promedio de tiempo de CPU, marque aquí para otras secuencias de comandos: http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true

SELECT TOP 50 
     qs.total_worker_time/qs.execution_count as [Avg CPU Time], 
     SUBSTRING(qt.text,qs.statement_start_offset/2, 
      (case when qs.statement_end_offset = -1 
      then len(convert(nvarchar(max), qt.text)) * 2 
      else qs.statement_end_offset end -qs.statement_start_offset)/2) 
     as query_text, 
     qt.dbid, dbname=db_name(qt.dbid), 
     qt.objectid 
FROM sys.dm_exec_query_stats qs 
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt 
ORDER BY 
     [Avg CPU Time] DESC 
2

Profiler puede parecer un enfoque de "aguja en un pajar", pero puede aparecer algo útil. Intente ejecutarlo durante un par de minutos mientras las bases de datos están bajo carga típica, y vea si alguna consulta se destaca por tomar demasiado tiempo o acaparar recursos de alguna manera. Si bien una situación como esta podría apuntar a un problema general, también podría estar relacionado con algún problema específico con uno o dos sitios, lo que hace que las cosas funcionen lo suficiente en ciertas circunstancias como para causar un rendimiento muy bajo en todos los ámbitos.

4

Usamos el producto Spotlight de Quest. Obviamente, se trata de una inversión en tiempo y dinero, por lo que puede que no lo ayude en el corto plazo, pero si tiene un gran entorno SQL, es bastante útil.

3

Como dice Yaakov, perfilador correr durante unos minutos bajo carga típica y guardar los resultados en una tabla que le permitirá ejecutar consultas en contra de los resultados, haciendo que sea mucho más fácil detectar cualquier consulta de búsqueda de recursos.

2

Ejecute el Perfilador y filtro para las consultas que toman más de un cierto número de lecturas. Para la aplicación en la que trabajé, cualquier consulta no basada en informes que requiriera más de 5000 lecturas merecía un segundo vistazo. Su aplicación puede tener un umbral diferente, pero la idea es la misma.

2

This utility por Erland Sommarskog es tremendamente útil.

Es un procedimiento almacenado que agrega a su base de datos. Ejecútelo cada vez que quiera ver qué consultas están activas y obtenga una buena imagen de bloqueos, bloques, etc. Lo uso regularmente cuando las cosas parecen engomarse.

4

He encontrado Performance Dashboard Reports para ser muy útil. Son un conjunto de informes RS personalizados proporcionados por Microsoft. Solo tiene que ejecutar el instalador en su PC cliente y luego ejecutar setup.sql en la instancia de SQL Server.

Después de eso, haga clic derecho en una base de datos (no importa cuál) en SSMS y vaya a Informes -> Informes personalizados. Navegue y seleccione el archivo performance_dashboard_main.rdl que se encuentra en la carpeta \ Archivos de programa \ Microsoft SQL Server \ 90 \ Tools \ PerformanceDashboard de forma predeterminada. Sólo necesitas hacer esto una vez. Después de la primera vez, aparecerá en la lista de informes.

La vista principal del tablero de instrumentos mostrará la utilización de la CPU a lo largo del tiempo, entre otras cosas. Puedes actualizarlo de vez en cuando. Cuando vea un pico, simplemente haga clic en la barra del gráfico para obtener los datos detallados detrás de él.

Cuestiones relacionadas