Announcement

Collapse
No announcement yet.

Timeout

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Timeout

    Hallo,<br>
    ich habe eine Applikation erstellt, die auf diverse Tabellen einer MSSQL-DB zugreift. Dabei werden ausschließlich TADODataset-Komponenten verwendet, die alle über eine globale TADOConnection auf die DB zugreifen. Auf einem Kundensystem tritt gelegentlich folgendes Problem auf: Die Userin arbeitet mehrere Stunden intensiv mit dem Programm. Zum Erstellen einer e-Mail minimiert sie das Programm. Wenn sie es anschließend wieder maximiert, erscheint die Fehlermeldung, dass ein Timeout aufgetreten sei. Bei dieser Meldung scheint es sich um eine nicht abgefangene Exception zu handeln, die von ADO ausgelöst wurde.<br>
    Das Problem ist nun, dass die Applikation sich nicht erneut starten läßt, auch ein Reboot des Client schafft keine Abhilfe. Erst wenn der DB-Server (MSSQL) gebootet wird, kann die Applikation wieder gestartet werden!!! Ob ein Start der Applikation von einem anderen Client möglich ist, ist nicht bekannt.<br>
    Hat irgendjemand eine Idee, was die Ursache für dieses Verhalten sein könnte? Offene Session, die den Server aus dem Tritt bringt?<br>
    Wenn mit der Applikation nicht aktiv gearbeitet wird, wird ca. alle 10s eine Session-Tabelle der Applikation geprüft - mehr nicht.<br>
    <br>
    D6Pro<br>
    W2K<br>
    MS-SQL<br><br>

    Danke schon mal für jeglichen Hinweis!<br><br>
    Gruß<br>Ulrich

  • #2
    Weitere Infos:<br>
    1.) Es tritt auch während des Arbeitens auf. OT: "Die Applikation wird langsamer und dann erscheint die Fehlermeldung."<br><br>
    2.) Wenn das Problem auftritt, ist auch kein Zugriff von einem anderen Client aus möglich.<br&gt

    Comment


    • #3
      Hallo,

      obwohl einige der Problemschilderungen nicht so richtig ins Bild passen, vermute ich, dass der implizite Datenbankverbindungs-Pool von OLE DB hochläuft und immer dann blockiert, wenn die Obergrenze der maximalen Datenbankverbindungen erreicht ist. Der "Vorteil" von ADO besteht darin, dass die nativen ADO-Objekte bei Bedarf automatisch weitere Datenbankverbindungen abspalten, wenn die alte Leitung noch von der letzten Aktion belegt ist. Dieser Komfort wurde für die ASP- und VB6-Leute eingebaut - aber manchmal kehrt sich der Vorteil ins Gegenteil um :-)

      Ich würde auf diesem Client-Rechner zurerst die <b>Leistungsanzeige</b> von Windows (siehe Verwaltung) aktivieren, um dort die Anzahl der Datenbankverbindung im Pool anzuzeigen: <br>
      - SQL Server: Allgemeine Statistik <br>
      - Benutzerverbindungen

      Wenn im laufenden Betrieb die Kurve ständig ansteigt, steckt ein prinzipieller Fehler im Programm (clUseServer vs. clUseClient usw.). Wenn diese Überwachung auf der Client-Seite nicht aktiviert werden kann, muss statt dessen auf der Server-Seite der <b>Profiler</b> des MS SQL Servers auf die Lauer gelegt werden, um den Verbindungsaufbau mitzuzählen.

      Welcher Wert wurde für den SQL Server im Eingabefeld <b>Maximum der gleichzeitigen Benutzerverbindungen (0=unbegrenzt)</b> eingetragen? Welcher Wert wurde im Eingabefeld <b>Abfragetimeout</b> eingetragen? Beide Informationen sind im Eigenschaftsdialog im Enterprise Manager auf der Registerseite <b>Verbindungen</b> zu finden.

      &gt;...Server neu booten....

      Wenn der Standard-Timeoutwert von 600 nicht geändert wurde, was passiert, wenn man im Blockade-Fall ca. 20 Minuten wartet? Ist dann wieder ein erfolgreicher Client-Zugriff möglich?

      Comment

      Working...
      X