Ich verwende Parallel.ForEach
, um mehrere Threads zu bearbeiten, indem ich für jede Iteration einen neuen EF5 DbContext verwende, der wie folgt in einem TransactionScope eingeschlossen ist:
Nach ein paar Minuten wird eine EntityException ausgelöst "Der zugrunde liegende Provider ist beim Öffnen fehlgeschlagen" mit folgendem inneren Detail:
"Die Instanz des SQL Server-Datenbankmoduls kann zu diesem Zeitpunkt keine LOCK-Ressource abrufen. Führen Sie die Anweisung erneut aus, wenn weniger aktive Benutzer vorhanden sind. Bitten Sie den Datenbankadministrator, die Sperr- und Speicherkonfiguration für diese Instanz zu überprüfen langlaufende Transaktionen. "
Weiß jemand, was das verursacht oder wie es verhindert werden kann? Danke.
Sie sollten auch herausfinden, warum Ihre App so viele Sperren verwendet? Sie haben ein TransactionScope um mehrere db-Verbindungen gewickelt. Dies verursacht wahrscheinlich eine verteilte Transaktion, die damit zu tun haben könnte. Es führt sicherlich dazu, dass Schlösser niemals bis zum Ende freigegeben werden. Ändern Sie das.
Sie können die Sperrgrenzen bisher nur aufdrehen. Es skaliert nicht auf beliebige Mengen von Lieferanten-IDs. Sie müssen die Ursache für die Sperren finden, nicht die Symptome mildern.
Es wird die maximale Anzahl der vom sql-Server erlaubten Sperren angezeigt - die standardmäßig automatisch festgelegt wird und vom verfügbaren Speicher bestimmt wird.
Sie können
Tags und Links sql-server c# entity-framework parallel-processing parallel.foreach