J'ai un SSD qui, à l'aide du test IOmeter, affiche des performances supérieures à 200 Mo / s. Cependant, lorsque j'exécute une requête SQL à partir d'une machine locale, le moniteur de ressources Windows n'affiche jamais les E / S de disque au-dessus de 7 Mo / s. Cela est vrai même pour les requêtes qui prennent plus de 2 minutes à s'exécuter. Quel pourrait être le goulot d'étranglement du fait qu'il n'utilise que 7 Mo / s du SSD?
Je suis entrain de courir:
- Windows Server 2012 Standard
- SQL Server 2008 R2
- Intel i7 3820
- 32 Go de RAM
- sandisk SSD
sql-server
sql-server-2008-r2
hardware
Dean MacGregor
la source
la source
sys.dm_os_waiting_tasks
pendant l'exécution de la requête pour voir s'il existe d'autres types d'attente.DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values
. Aucun résultat n'est donc renvoyé au client, mais le plan et les E / S seront toujours les mêmes.Réponses:
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:
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.la source