Laden...

Hilfe bei Timeout-Problem

Erstellt von t2t vor 16 Jahren Letzter Beitrag vor 14 Jahren 1.785 Views
T
t2t Themenstarter:in
415 Beiträge seit 2007
vor 16 Jahren
Hilfe bei Timeout-Problem

Hallo,

ich entwickel gerade ein Tool, welches eine extrem große und langwierige MySql Abfrage an ca. 400 Datenbanken stellt. Dabei laufe ich in einer Schleife über alle Datenbanken und erstelle mir eine temporäre Datenbank.
Klappt alles bestens, wie es soll. Allerdings stoße ich bei einer besonders großen Datenbank (und länger dauernden Abfrage) an das Problem, dass mein try-Block nach ca 30 Sek. einen Timeout-Fehler wirft. Angeblich weil der Datenbankserver nicht mehr antwortet.
Wie kann ich dieses Problem am besten elegant umgehen? Ich würde den Programmcode gerne Schützen, sodass meine Application auf das beenden des Codes wartet. Mit dem Versuch den Teil einfach in einen Thread auszulagern kam ich nicht weit.

Über Tipps die mir weiterhelfen wäre ich sehr dankbar!

S
489 Beiträge seit 2007
vor 16 Jahren

Nicht Dein Try Block wirft ein Timeout, sondern Deine SQL Abfrage. Schau mal nach OleDbCommand.CommandTimeout.

T
t2t Themenstarter:in
415 Beiträge seit 2007
vor 16 Jahren

Traumhaft! Das war der Fehler. Nach erhöhen der Timeoutzeit auf 7 Minuten klappt es bestens.

Vielen Dank!

92 Beiträge seit 2006
vor 14 Jahren
Nachgefragt: CommandTimeout

Noch eine Frage bezüglich des CommandTimeouts. MS SQL 2005 verwendet ja auch dieses Field (default: 30sec) um die Ausführlänge von Commands zu begrenzen.

SqlCommand.CommandTimeout:
http://msdn.microsoft.com/de-de/library/system.data.sqlclient.sqlcommand.commandtimeout(VS.80).aspx

Was spricht dagegen, diesen defaultwert von 30 auf sagen wir mal 60*10 = 10min anzuheben? Ich habe einige wenige StoredProcedures, die teilweise bis zu 5min benötigen. Und möchte des einfach global für alle Commands verwenden.

Meine negativern Effekte:

  • Falls die StoredProcedure einen endlessloop hat, muss ich wohl bis zum 10min timeout warten

Kennt jemand andere Effekte? Oder andere Dinge die dagegen sprechen?

Danke und gruss
dataCore

1.564 Beiträge seit 2007
vor 14 Jahren

Da spricht grundsätzlich nichts dagegen. Das SSMS verwendet für seine Queries ja auch keinen Timeout. Diese 30 Sekunden sind nur ein Pi*Daumen Richtwert wie lange man einen Anwender warten lassen kann/sollte.

Wir haben hier Jobs die nachts bis zu mehrere Stunden laufen. Hier ist die CommandTimeout auf 0 (kein Timeout) gestellt.

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

92 Beiträge seit 2006
vor 14 Jahren

Beim Wert 0 wird der Commandtimeout ausgehebelt? ... ist auch eine Überlegung wert. So wäre man selber verantwortlich, dass man keinen Endlosloop in seine Commands reinknallt...

Falls also keine anderen Seiteneffekte damit verbunden sind, werde ich das mal auf eine Stunde, oder wie du sagst, ganz auf 0 setzten.

gruss und danke!
dataCore