Ich habe eine SSD, die mithilfe des IOmeter-Tests eine Leistung von über 200 MB / s anzeigt. Wenn ich jedoch eine SQL-Abfrage von einem lokalen Computer aus ausführe, zeigt der Windows-Ressourcenmonitor niemals Festplatten-E / A über 7 MB / s an. Dies gilt auch für Abfragen, deren Ausführung länger als 2 Minuten dauert. Was könnte der Engpass sein, dass nur 7 MB / s von SSD verwendet werden?
Ich renne:
- Windows Server 2012 Standard
- SQL Server 2008 r2
- Intel i7 3820
- 32 GB RAM
- Sandisk SSD
sql-server
sql-server-2008-r2
hardware
Dean MacGregor
quelle
quelle
sys.dm_os_waiting_tasks
während der Ausführung der Abfrage zu prüfen, ob andere Wartetypen vorhanden sind.DECLARE @Name VARCHAR(10), @High int; SELECT @Name=name, @High = high FROM master..spt_values
. Es werden also keine Ergebnisse an den Client zurückgesendet, aber der Plan und die E / A bleiben unverändert.Antworten:
Aus der Kommentarkette geht hervor, dass Sie
ASYNC_NETWORK_IO
Wartezeiten so interpretieren , dass das Problem mit dem Netzwerk zusammenhängt. Es ist (normalerweise) nicht.Wie @MartinSmith (zweimal) angedeutet hat, ist die wahrscheinlichste Erklärung dafür SSMS oder die von Ihnen verwendete Anwendung, die die Ergebnisse nicht so schnell verbraucht, wie SQL Server sie bereitstellt. Befolgen Sie eine der vorgeschlagenen Methoden, um den Verbrauch der Zeilen aus Ihrer Messung zu entfernen, und Sie erhalten ein echtes (r) Bild des maximalen E / A-Durchsatzes:
Nur für den Fall, dass Sie dies noch nicht getan haben, müssen Sie natürlich
DBCC DROPCLEANBUFFERS
sicherstellen, dass die Daten tatsächlich von der Festplatte gelesen werden und nicht vom Puffercache. Es gelten die üblichen Vorbehalte "Nur beim Test, tun Sie dies nicht in einer aktiven Live-Umgebung" usw.Ein paar Ihrer anderen Kommentare:
Was genau testen wir hier, wie und warum? Wenn Ihre 9-Millionen-Zeilen-Abfrage etwas anderes als a
SELECT * FROM dbo.SomeTable
ist, spielen 1001 Faktoren eine Rolle, außer nur der rohe E / A-Durchsatz.Ihr Intel I7-3820 ist ein 4-Kern-Prozessor. Wenn Ihre Testabfrage keinen parallelen Plan generiert, wäre ich überrascht, wenn Sie mehr als 20% der CPU-Auslastung aus dem System herausholen könnten.
Die 3 Minuten, um 9 Millionen Zeilen zurückzugeben, sind sehr verdächtig und deuten darauf hin, dass wir kein vollständiges Bild von Ihren Tests erhalten. Ich würde vermuten, dass dies ein Fall eines suboptimalen (nicht parallelen) Abfrageplans ist, der voll von Nested-Loop-Operatoren ist, die Millionen von Zeilen ziehen, dh nicht nur eine einzige Tabelle
SELECT
, um den E / A-Verbrauch zu überprüfen.Ich schlage vor:
SELECT *
um nur E / A über SQL Server zu testen .quelle