Wenn man sich die Liste der gespeicherten Prozeduren ansieht, deren Ausführung lange dauert, fällt auf, dass die meisten Wartezeiten auftreten. Der größte Teil dieser Wartezeit (81%) ist ASYNC_NETWORK_IO, und ich weiß, warum: Die gespeicherte Prozedur überträgt ungefähr 400 MB an Informationen.
In der Dokumentation wird angegeben, dass die Ursache für ASYNC_NETWORK_IO darin besteht, dass der Client mit der Datenflut nicht Schritt halten kann. Dies ist wahrscheinlich der Fall. Ich bin mir nicht sicher, wie der Client mithalten soll, da er die gespeicherte Prozedur nur über ADO.NET aufruft und dann nur den Datensatz verarbeitet.
Sollte ich mir angesichts dieser Informationen Gedanken über den Wartetyp ASYNC_NETWORK_IO für diese Prozedur machen? Hat dies tatsächlich Auswirkungen auf die Serverleistung?
Zusätzliche Informationen:
- Ich arbeite mit Service Pack 2 von SQL Server 2005.
- Die Client-App befindet sich auf demselben Computer wie SQL Server (ich weiß, ich weiß ... aber ich kann nichts dagegen tun).
Antworten:
Wie Sie sagten, zeigt dieser Wartetyp an, dass die Anwendung nicht mit SQL Server Schritt hält. Das bedeutet nun wirklich, dass SQL Server die Daten nicht so schnell über das Netzwerk senden kann, wie es möchte.
Es kann zwei Ursachen geben:
Wenn die Anwendung selbst zu langsam ist, hat dies keine oder keine wesentlichen Auswirkungen auf die Leistung anderer Abfragen. Ist die Pipe hingegen zu klein, können auch andere Abfragen ihre Ergebnisse nicht senden und müssen warten.
In letzterem Fall müssten jedoch alle Verbindungen auf ASYNC_NETWORK_IO warten. Sie sollten diese Auswirkungen deutlich sehen können.
quelle
var dataSet = new DataSet();
var da = new SqlDataAdapter(command);
da.Fill(dataSet);
Ich bin mir also nicht sicher, was genau langsam sein könnte.