Ich bekomme eine vertraute Timeout SqlException, wenn ich eine Menge neuer Datensätze schnell mit Subsonic ActiveRecord und Sql Server hinzufügen.Subsonic ActiveRecord - Verbindungen hängen beim Hinzufügen von vielen Datensätzen
Timeout abgelaufen. Der Timeout-Zeitraum ist vor dem Erhalt einer Verbindung vom Pool verstrichen. Dies kann aufgetreten sein, weil alle gepoolten Verbindungen verwendet wurden und max Pool Größe erreicht wurde.
Ich habe es geschafft, diese Frage mit dem folgenden einfachen Code-Block zu replizieren:
for (int i = 0; i < 1000; i++)
{
var address = new Address();
address.City = "TEST";
address.Save();
}
Der Code wird Datensätze hinzufügen, bis es 100 (die Größe Max Pool, wahrscheinlich nicht zufällig) erreicht, an dem Punkt es scheitert mit der obigen Ausnahme. Danach werden die Verbindungen für ungefähr 5-10 Minuten gehalten, währenddessen alle Versuche, die Datenbank zu verwenden, die obige Ausnahme ergeben.
Interessanterweise habe ich festgestellt, dass das Ausführen auf meinem lokalen Computer in VS (gleiche Codebasis für genau die gleiche Datenbankinstanz) der Code erfolgreich alle 1000 Datensätze hinzufügen. Vielleicht verlangsamt die Latenz zwischen hier und meinem Host die Datenbankaufrufe genug?
Vorausgesetzt, dass es lokal funktioniert, nehme ich an, dies ist kein Subsonic Problem direkt, aber gibt es einen Fehler, den ich mache oder irgendeine Art und Weise kann ich meinen Code oder Konfiguration ändern, um das schnelle Öffnen und Schließen von Verbindungen zu behandeln viele Datensätze seriell hinzufügen?
Dank für die Buchung hinzuzufügen hatte, habe ich es nicht wirklich träumte ein Problem mit Ihrem AR war. Ich benutze 3.0.0.3. Muss etwas mit dem Hosting-Provider oder ASP.NET-Konfiguration drüben sein. Mehr Seltsamkeit: Mit 100 Adds wird es erfolgreich und wiederholt abgeschlossen, sogar beim Laden der Seite, auf der die Add-in in 2 Browser-Fenstern gleichzeitig ausgeführt werden. Mit 101 fügt es jedes Mal fehl und sperrt alle Verbindungen für unbegrenzte Zeit. Verzögern nach jedem Hinzufügen, um Latenz zu simulieren und die Geschwindigkeit der Verbindung/Trennung zu reduzieren, hilft nicht. Das Ausführen eines .Find() - Befehls anstelle des Befehls .Add() hat den gleichen Effekt. –
Ein weiterer Datenpunkt, der dies außerhalb von AR macht, scheitert nicht am Host: (Erstellen einer neuen sqlconnection, neuer sqlcommand, öffnender Conn, Ausführen des insert cmd als Textbefehl, disposed cmd, conn) innerhalb der Schleife scheint in Ordnung zu sein bis zu unendlichen Zählungen. Vielleicht ist es etwas darüber, wie AR die Verbindungen/Befehle, die mit der Konfiguration des Hosts in Konflikt stehen, freigibt/entfernt? –