De la chaîne des commentaires, il semble que vous interprétiez les ASYNC_NETWORK_IO
attentes pour signifier que le problème est lié au réseau. Ce n'est généralement pas le cas.
Comme @MartinSmith a laissé entendre (deux fois) que l'explication la plus probable est SSMS ou l'application que vous utilisez ne consomme pas les résultats aussi rapidement que SQL Server les sert. Suivez l'une des méthodes suggérées pour supprimer la consommation des lignes de votre mesure et vous obtiendrez une image vraie (r) du débit d'E / S maximal:
Au cas où vous ne l'auriez pas déjà fait, vous devrez évidemment vous DBCC DROPCLEANBUFFERS
assurer que les données sont réellement lues à partir du disque plutôt que du cache de tampon. Les mises en garde habituelles de "sur test uniquement, ne le faites pas dans un environnement actif", etc. s'appliquent.
Mettant l'accent sur quelques-uns de vos autres commentaires:
Lors de l'exécution d'une requête qui renvoie 9 millions de lignes, l'utilisation du processeur restera autour de 13%, dont 9% attribuables à sqlserver ... ne retournerait-il pas les résultats plus rapidement que 3 minutes si toutes les données étaient en RAM?
Que testons-nous exactement ici, comment et pourquoi? Si votre requête de 9 millions de lignes est autre chose qu'un, SELECT * FROM dbo.SomeTable
alors il y a 1001 facteurs qui entrent en jeu, autre que le débit d'E / S brut.
Votre Intel I7-3820 est un processeur à 4 cœurs. Si votre requête de test ne génère pas de plan parallèle, je serais surpris si vous pouviez supprimer plus de 20% d'utilisation du processeur du système.
Les 3 minutes pour renvoyer 9 millions de lignes sont très suspectes et suggèrent que nous n'obtenons pas une image complète de vos tests. Je suppose que c'est un cas de plan de requête sous-optimal (non parallèle), bourré d'opérateurs de boucle imbriquée tirant des millions de lignes, c'est-à-dire pas seulement une seule table SELECT
pour vérifier la consommation d'E / S.
Je suggère:
SELECT *
pour tester uniquement IO via SQL Server.
- Nouvelle question avec le plan d'exécution de votre requête si vous voulez savoir pourquoi cela ne sature pas les IO.