procedimientos - Identificación de problemas de rendimiento de SQL Server
rendimiento sql server (7)
Como dice Yaakov, ejecute Profiler durante unos minutos bajo carga típica y guarde los resultados en una tabla que le permita ejecutar consultas en contra de los resultados, haciendo que sea mucho más fácil detectar cualquier consulta de búsqueda de recursos.
Estamos teniendo tiempos de espera de consulta esporádicos y aleatorios 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 acumulado 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?
¿Alguien tiene algunos buenos métodos para rastrear consultas / procesos costosos en este entorno?
Descubrí que los Informes del Panel de rendimiento son muy útiles. 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.
Ejecute Profiler y filtre las consultas que requieren 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.
Esta utilidad de 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.
Esto le dará las 50 mejores declaraciones por tiempo promedio de CPU, consulte aquí 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
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.
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.