He estado discutiendo con un DBA y un par de expertos en hardware sobre problemas de rendimiento en nuestro servidor SQL. Normalmente todo está bien, sin embargo, en las últimas semanas hemos tenido grandes picos de retraso en el servidor SQL. Está claro que SQL Server está esperando en la E / S del disco. Pero me siguen diciendo que es porque SQL Server está pidiendo E / S anormalmente altas. Que no es el caso. Puedo ver por lo que se está ejecutando que no hay nada fuera de lo normal, y todo lo que el DBA tiene en cuenta es qué está causando el bloqueo, etc., lo que es inútil. Por ejemplo, lo más importante que vemos es una operación de respaldo en la base de datos ASPState, que estamos usando para administrar el estado de sesión ASP en los servidores web. Estas operaciones normalmente nunca se ven en los resultados activos de Sp_who2 porque ocurren muy rápido. La base de datos está en modo de recuperación simple y el registro es miminal. Sin embargo, durante estos picos de retraso podemos ver muchas operaciones de selección y actualización en la base de datos bloqueada o en espera. Estoy seguro de que lo que está sucediendo es que alguien o algún trabajo está ejecutando algo que está causando el uso del disco pesado en las matrices de incursiones utilizadas para ese registro de bases de datos y archivos de datos. El problema lo está demostrando, ya que nadie quiere admitir que están haciendo algo que está matando nuestro sitio web.
Mi pregunta es qué contadores de rendimiento o cualquier cosa que pueda registrar que ayudará a mostrar que el servidor SQL está esperando E / S, pero no porque está pidiendo más de lo normal, sino porque el disco está ocupado para responder a las solicitudes del servidor SQL tan rápido como lo haría normalmente?
fuente
Respuestas:
Echa un vistazo a los siguientes contadores de perfmon:
Page lookups/sec
Page reads/sec
Readahead pages/sec
Full Scans/sec
Range Scans/sec
Skipped Ghosted Records/sec
Page IO latch waits
SQL Server que maneja una gran cantidad de solicitudes de E / S se corroboraría con una gran cantidad de escaneos, un aumento en las búsquedas de páginas y lecturas de páginas y altas esperas de bloqueo de E / S de páginas. Vale la pena probar las
sys.dm_exec_query_stats
entradas con un alto recuento de lecturas físicas. Podrían localizar rápidamente al culpable.En general, abordar el problema como un problema de resolución de problemas de rendimiento, seguir una metodología como Waits and Queues es el enfoque correcto. Tu DBA parece estar haciendo lo correcto, así que deberías escucharlo.
fuente
IO Data Bytes/sec
ver si algún otro proceso está destruyendo el disco.Para comenzar, use las consultas de diagnóstico de Glenn Berry y SP_Whoisactive de Adam Machanic para averiguar qué está sucediendo realmente.
Primero vea qué archivos de la base de datos tienen el mayor cuello de botella de IO ejecutando esta consulta (Consulta de Glenn Berry)
Luego ejecute esta consulta para ver los diez eventos principales que su servidor está esperando (consulta de Jonathan Kehayias ). También encontrará consultas similares en las consultas de diagnóstico de Glenn Berry.
Una vez que tenga esta información a mano, sería mucho más fácil solucionar el problema.
Por cierto, puedes encontrar muchas publicaciones sobre cómo usar sp_whoisactive para la resolución de problemas aquí.
fuente
"El problema lo está demostrando", dijo con razón. Eche un vistazo a SQL Server: minimice la E / S de disco
Se trata de seguir al DMV
Referencias
fuente