Tengo un SSD que, utilizando la prueba IOmeter, muestra un rendimiento superior a 200 MB / s. Sin embargo, cuando ejecuto cualquier consulta SQL desde la máquina local, el monitor de recursos de Windows nunca muestra el disco IO por encima de 7 MB / seg. Esto es válido incluso para consultas que tardan más de 2 minutos en ejecutarse. ¿Cuál podría ser el cuello de botella de que solo está usando 7 MB / seg de SSD?
Estoy corriendo:
- Windows Server 2012 Standard
- SQL Server 2008 r2
- Intel i7 3820
- 32 GB de ram
- Sandisk SSD
sql-server
sql-server-2008-r2
hardware
Dean MacGregor
fuente
fuente
sys.dm_os_waiting_tasks
mientras se ejecuta la consulta para ver si hay otros tipos de espera que encuentre.DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values
. Por lo tanto, no se envían resultados al cliente, pero el plan y el IO seguirán siendo los mismos.Respuestas:
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:
¿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.fuente