2009-07-24 14 views
1

Ich denke, dass ich eine Datenbankverbindung Zeitüberschreitung mit meiner SQLite-Verbindung habe, aber ich bin mir nicht sicher, wie das Verbindungstimeout zu erhöhen. Das Befehlszeitlimit kann mit ConnectionString.DefaultTimeout festgelegt werden, aber Connection.ConnectionTimout ist schreibgeschützt. Irgendwelche Vorschläge?Set ConnectionTimeout in System.Data.SQLite

Danke, Brian

Antwort

2

Es wird in der Verbindungszeichenfolge festgelegt: SqlConnection

10

Überschreiten der Standardwert (30 Sekunden) Timeout für SQLite-Abfragen ist ein starker Hinweis darauf, dass etwas in Ihrem Ansatz falsch ist.

Timeouts treten normalerweise auf, wenn zu viele gleichzeitige Verbindungen vorhanden sind. SQLite verhält sich schlecht, wenn Sie Schreib-/Lesetransaktionen verschachtelt haben.

Stellen Sie sicher, dass Sie verwandte SQL-Anweisungen in einer einzigen Transaktion chunked (die Leistungsgewinne können x1000 sein!).

Ein weiterer Tipp: Standardmäßig - wenn Sie eine Transaktion (BeginTransaction) starten - ist das Standardverhalten, eine Schreibsperre sofort zu erhalten. Versuchen Sie stattdessen, die Version BeginTransaction (Version) zu verwenden, und geben Sie an, dass Sie das Erwerben einer Schreibsperre aufschieben möchten, bis sie tatsächlich benötigt wird. Dies wird Ihnen helfen, wenn Sie mehrere Leser haben, da sie jetzt gleichzeitig laufen können.

+0

sehr hilfreich danke! –

+1

Dies ist der beste Rat, den jemand geben kann. Oftmals wirft die Antwort nicht mehr Hardware auf sie (Ändern des Verbindungstimeouts hier), sondern die Wurzel des Leistungsproblems - die Abfrage. Und das kann SCHWER sein. Ich habe Performance-Profiling in vielen Datenbanken durchgeführt und einige Performance-Probleme können Wochen dauern, um zu finden, aber mehr Hardware zu werfen, das ist nicht die langfristige Antwort. –

Verwandte Themen