Gibt ASYNC_NETWORK_IO einen Wartetyp an, über den Sie sich Sorgen machen müssen?


16

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).

1
Der beste Weg, um über diese Art des Wartens nachzudenken, ist, dass Ihre Abfrage nichts verursacht - sie gibt Daten an den Client zurück. Sie werden auch feststellen, dass viele von Ihnen Tabellen in Access verknüpft haben. Eine Möglichkeit, die von Ihrer Client-App abhängt, besteht darin, die Daten in kleinere Abschnitte zu unterteilen oder einfach weniger Daten zurückzugeben. Wenn dies keine Option ist, sind Sie wahrscheinlich in der Frage eingeschränkt, was Sie tun können, um sie zu reduzieren.
JNK

Stellt die Client-App eine Verbindung über Shared Memory oder TCP / IP her? Teilen sich die Clientanwendung und der SQL Server denselben Satz von Prozessorkernen oder verwenden Sie eine Affinitätsmaskierungstechnik, um sie zu trennen?
Jon Seigel

Es ist der Standardverbindungstyp - nichts Besonderes - daher wird Shared Memory verwendet. Beide Apps verwenden denselben Satz von Kernen - es gibt keine Affinität.
AngryHacker

Ist Ihr Speicher-SAN oder lokal?
Eric Higgins

@EricHiggins Nur ein lokaler Satz von RAID-Festplatten.
AngryHacker

Antworten:


14

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:

  1. Die App ist ineffizient geschrieben und verarbeitet die Zeilen nicht schnell genug.
  2. Das Netzwerk ist voll.

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.


Zum Aufzählungspunkt 1. Der Datenabruf erfolgt über ADO.NET mit Standardcode: var dataSet = new DataSet(); var da = new SqlDataAdapter(command); da.Fill(dataSet); Ich bin mir also nicht sicher, was genau langsam sein könnte.
AngryHacker

Für Aufzählungspunkt 2. Die Anwendung befindet sich im selben Feld wie SQL und die Verbindung erfolgt über die Shared Memory-Methode. Also theoretisch sollte das super schnell gehen.
AngryHacker
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.