SQL Server 2005-Blocking Problem (ASYNC_NETWORK_IO)
Ich bin verantwortlich für die Anwendung eines Drittanbieters (kein Zugriff auf Quellcode), auf dem IIS ausgeführt wird und SQL Server 2005 (500 gleichzeitige Nutzer, 1-TB-Daten, 8-IIS-Server). Wir haben vor kurzem damit begonnen, um zu sehen, signifikante blockieren auf der Datenbank (nach Monaten läuft diese Anwendung in der Produktion mit keine Probleme). Dies geschieht in zufälligen Abständen während des Tages, etwa alle 30 Minuten, und betrifft zwischen 20 und 100 Sitzungen jedes mal. Alle Sitzungen, die dann auf die Anwendung time-out und die Sitzungen abzubrechen.
Verschwindet das problem und dann nach und nach wieder auftaucht. Die SPID verantwortlich für die Sperrung immer hat die folgenden Besonderheiten:
- WARTEN TYPE = ASYNC_NETWORK_IO
- Der SQL ausgeführt wird, “(@claimid
varchar(15))WÄHLEN Sie claimid, enrollid,
status, orgclaimid, resubclaimid,
primaryclaimid VON Anspruch WO
primaryclaimid = @claimid UND
primaryclaimid <> claimid)". Dies ist
relativ Harmlose SQL sollte
nur ein oder zwei Sätze, nicht einer
für große datasets. - KEINE ANDERE SQL-Anweisungen wurden
Verwicklung in die Sperrung, die nur diese
SQL-Anweisung. - Dies ist die parametrisierte SQL für die
ein Ausführungsplan im Cache
sys.dm_exec_cached_plans. - Diese SPID hat eine Objekt-Ebene S-Sperre auf die Tabelle behaupten, also alle UPDATEs/INSERTs zu der Behauptung Tabelle sind auch gesperrt werden.
- HOST-ID variiert. Verschiedene web-Server sind verantwortlich für die Sperrung Sitzungen. E. g., manchmal Folgen wir zurück zum web-server 1, manchmal web-server 2.
Wenn wir zurückverfolgen, um den web-server Verwicklung in die Sperrung, sehen wir das folgende:
- Es gibt immer irgendeine Art von
Anwendungs-bezogene Fehler in der
Ereignis-Protokoll auf dem web-server verknüpft
die Host-ID und Host-Prozess-ID
aus der SQL-Sitzung. - Die Fehlermeldungen variieren, in der Regel einige
Art SystemOutofMemory. (Diese
Fehlermeldungen scheinen ähnlich zu sein
Fehlermeldungen, die wir gesehen haben
der Vergangenheit ohne solche dramatischen
Folgen. Wir denken, war passiert
vor, aber nicht dazu führen, zu blockieren.
Warum jetzt?) - Keine bekannten Probleme mit dem Netzwerk
Adapter, die entweder auf dem Webserver oder
der SQL-server.
(In jedem Fall der Datensatz zurückgegeben, die durch die problematische Abfrage wäre klein.)
Dinge ausgeschlossen:
- Indizes werden regelmäßig defragmentiert.
- Statistik regelmäßig aktualisiert werden.
- Erhöhten Stichprobenumfang von Statistiken
auf Anspruch.primaryclaimid. - Erzwungene Neukompilierung des zwischengespeicherten
Ausführungsplan. - Erstellt einen zusammengesetzten index mit
primaryclaimid, claimid. - Keine Netzwerkprobleme.
- Keine Probleme bekannt, die auf den web-server.
- Keine änderungen an Anwendungs-software auf
web-Servern.
Wir vermuten, dass die Kette von Ereignissen geht so etwas wie dieses:
- Web-server-Prozess sendet SQL
oben. - SQL server führt die SQL -, während
das es eine Sperre auf der
Forderung Tisch. - Web-server-Prozess einen Fehler erhält, und
stirbt. - SQL server-Sitzung reagiert, warten
für die web-server-Prozess zu Lesen
die Daten gesetzt werden. - SQL-Server-Sitzungen, die erforderlich zu erhalten
X-sperren auf Teile der Forderung in der Tabelle
(jeder, der Verarbeitung Ansprüche)
blockiert durch die Sperre auf die Forderung
Tabelle und bleiben gesperrt, bis Sie
alle Treffer der Anwendung time-out.
Anregungen für die Fehlersuche während der Wartezeit für den Verkäufer-Hilfe wäre sehr willkommen.
Gibt es eine Möglichkeit zu zwingen, die SQL Server sperren auf Zeilen - /Seiten-Ebene für diese bestimmten SQL-Anweisung nur?
Gibt es eine Möglichkeit, einen Schwellenwert festlegen auf ASYNC_NETWORK_IO wartet nur?
InformationsquelleAutor ivankolo | 2010-03-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
ASYNC_NETWORK_IO die durch clients verursacht wird, die nicht in der Lage, Daten zu empfangen, schnell genug und Abfüllung Netzwerk-Puffer (einfach ausgedrückt). Es gibt keine Magie, SQL Server festlegen, um es zu beheben.
Ist es nicht ein SQL Server-Problem...
InformationsquelleAutor gbn
Ich hatte das gleiche problem und hab es gelöst, wenn ich Behinderte den Kaspersky antivirus auf dem client.
InformationsquelleAutor victormlima