De la cadena de comentarios, parece que estás interpretando ASYNC_NETWORK_IO
esperas para significar que el problema está relacionado con la red. (Normalmente) no lo es.
Como @MartinSmith insinuó (dos veces) la explicación más probable para esto es SSMS o la aplicación que está utilizando que no consume los resultados tan rápido como SQL Server los está sirviendo. Siga cualquiera de los métodos sugeridos para eliminar el consumo de las filas de su medición y obtendrá una imagen verdadera (r) del rendimiento máximo de E / S:
En caso de que aún no lo haya hecho, obviamente DBCC DROPCLEANBUFFERS
deberá asegurarse de que los datos se lean realmente del disco en lugar de la memoria caché del búfer. Se aplican las advertencias habituales de "solo en la prueba, no haga esto en un entorno activo", etc.
Afinando algunos de sus otros comentarios:
Al ejecutar una consulta que devuelve 9 millones de filas, el uso de la CPU se mantendrá en torno al 13% con un 9% atribuible a sqlserver ... ¿no devolvería los resultados más rápido que 3 minutos si todos los datos estuvieran en la RAM?
¿Qué estamos probando exactamente aquí, cómo y por qué? Si su consulta de 9 millones de filas no es una, SELECT * FROM dbo.SomeTable
entonces hay 1001 factores que entran en juego, además del rendimiento de E / S sin procesar.
Su Intel I7-3820 es un procesador de 4 núcleos. Si su consulta de prueba no genera un plan paralelo, me sorprendería si pudiera obtener más del 20% de utilización de la CPU del sistema.
Los 3 minutos para devolver 9 millones de filas son muy sospechosos y sugieren que no estamos obteniendo una imagen completa de lo que está probando. Supongo que este es un caso de plan de consulta subóptimo (no paralelo), lleno de operadores de bucle anidado que extraen millones de filas, es decir, no solo una tabla SELECT
para verificar el consumo de E / S.
Yo sugiero:
SELECT *
para probar solo IO a través de SQL Server.
- Nueva pregunta con el plan de ejecución de su consulta si desea profundizar en por qué no satura el IO.