2008-09-09 12 views
6

Hier ist der vollständige Fehler zu erhalten: SqlException: A transport-level error has occurred when receiving results from the server. (provider: Shared Memory Provider, error: 1 - I/O Error detected in read/write operation)Was sind die Ursachen dieses SqlException: Ein Übertragungsfehler aufgetreten ist, wenn Ergebnisse von dem Server

ich diese Meldung zeitweise für ein paar der Unit-Tests in meiner Anwendung zu sehen, haben damit begonnen, (Es gibt über 1100 Einheit & Systemtests). Ich benutze den Testläufer in ReSharper 4.1.

Eine andere Sache: meine Entwicklungsmaschine ist eine VMWare virtuelle Maschine.

Antwort

5

Ich lief in diese vielen Monde vor. Unter dem Strich sind die verfügbaren Ports knapp.

Stellen Sie zuerst sicher, dass Ihre anrufende Anwendung Verbindungspooling aktiviert hat.

Wenn dies der Fall ist, dann überprüfen Sie die Anzahl der verfügbaren Ports für den SQL Server.

Was ist passiert, wenn Pooling ausgeschaltet ist dann nimmt jeder Anruf einen Port und es dauert standardmäßig 4 Minuten, um den Port ablaufen zu lassen, und Sie haben keine Ports mehr.

Wenn Pooling aktiviert ist, müssen Sie alle Ports von SQL Server profilieren und sicherstellen, dass Sie genug haben und erweitern Sie sie bei Bedarf.

Als ich auf diesen Fehler stieß, war das Verbindungspooling deaktiviert und verursachte dieses Problem, wenn eine ordentliche Last auf die Website gesetzt wurde. Wir haben es in der Entwicklung nicht gesehen, weil die Last 2 oder 3 Leute bei Maximum war, aber sobald die Zahl über 10 wuchs, sahen wir diesen Fehler immer wieder. Wir haben Pooling gemacht und es repariert.

2

Ich lief in diese vielen Monde auch. Allerdings nicht @ Longhorn213s Erklärung, aber wir hatten das genaue Gegenteil Verhalten. Wir haben den Fehler bei der Entwicklung und beim Testen erhalten, aber nicht bei der Produktion, bei der offensichtlich die Last viel größer war. Wir haben das Problem in der Entwicklung toleriert, da es sporadisch war und den Fortschritt nicht wesentlich verlangsamte. Ich denke, es könnte mehrere Gründe für diesen Fehler geben, aber ich konnte die Ursache nie selbst bestimmen.

+0

Wie Trumpi vorschlägt, habe ich festgestellt, dass dieser Fehler auftreten kann, indem einfach der DB-Server (oder irgendetwas, das den Server zwingt, die Verbindung freizugeben).Die Verbindung wird immer noch auf einer anderen Ebene zwischen dem Client und einem Pool zwischengespeichert. Beim Versuch, sie zu verwenden, gibt die Erkennung, dass sie nicht mehr gültig ist, den Fehler "transport level error" zurück. Das liegt wahrscheinlich daran, dass Sie Ihren Produktions-DB-Server nicht neu starten (eine gute Sache) und Sie Ihren DB-Server neu starten (wen interessiert das?). – ErikE

0

Ich habe das oft gesehen, wenn das Netzwerk funky war, oder die NIC war auf dem Weg nach draußen. Überprüfen Sie Ihren Netzwerkstapel.

0

Wir haben das in unserer Umgebung gesehen und einen Teil davon in unseren Abfragen auf den "NOLOCK" -Hinweis zurückgeführt. Wir haben den NOLOCK-Hinweis entfernt und unsere Server für die Verwendung des Snapshot-Isolationsmodus eingestellt, und die Häufigkeit dieser Fehler wurde erheblich reduziert.

1

Wir sind auch auf diesen Fehler gestoßen und haben herausgefunden, dass wir eine SQL Server-Verbindung vom Datenbankserver löschen. Die Clientanwendung hat den Eindruck, dass die Verbindung noch aktiv ist und versucht, diese Verbindung zu verwenden, schlägt jedoch fehl, weil sie beendet wurde.

0

Wir haben diesen Fehler ein paar Mal gesehen und verschiedene Auflösungen mit unterschiedlichem Erfolg ausprobiert. Ein allgemeines zugrunde liegendes Thema war, dass dem System, das den Fehler gab, nur wenig Speicher zur Verfügung stand. Dies gilt insbesondere dann, wenn auf dem Server, auf dem Sql Server gehostet wird, ein beliebiger anderer Prozess ausgeführt wird. Standardmäßig greift SQL Server auf jeden möglichen Speicher zu, wenn wenig für andere Prozesse/Treiber übrig bleibt. Dies kann zu fehlerhaftem Verhalten und unterbrochenen Nachrichten führen. Es empfiehlt sich, den SQL Server für einen maximalen Speicher zu konfigurieren, der einen gewissen Spielraum bietet, wenn andere Prozesse erforderlich sind. Beispiel: Visual Studio auf einem Entwicklungscomputer, auf dem eine Kopie der SQL Server-Entwickleredition auf demselben Computer ausgeführt wird.