Microsoft JET SQL Query Protokollierung oder „Wie kann ich debuggen Programm meine Kunden?“

StackOverflow https://stackoverflow.com/questions/153053

Frage

Das Problem:

Wir verwenden ein Programm durch unseren größten Kunden schriftlichen Bestellungen zu erhalten, Buch tranports und tun andere auftragsbezogene Sachen. Wir haben keine andere Chance, aber das Programm zu verwenden, und der Kunde ist sehr unkooperative, wenn es um Probleme mit ihrem Programm kommt. Wir haben gerade mit dem Programm zu leben.

Jetzt ist dieses Programm die meiste Zeit extrem langsam, wenn die Verwendung mit zwei oder mehr Benutzer so habe ich versucht, hinter dem Vorhang zu schauen und die Quelle des Problems finden.

Einige Punkte über das Programm, das ich bisher herausgefunden:

  • Es ist geschrieben in VB 6.0
  • Es verwendet einen passwortgeschützten Zugang-DB (Access 2000 MDB), die einen Ordner auf einem Computer des Benutzers befindet.
  • Dieser Ordner über das Netzwerk gemeinsam genutzt wird und von allen anderen Benutzern verwendet wird.
  • Es nutzt die msjet40.dll Version 4.00.9704 mit Zugang zu kommunizieren. Ich denke, es ist ADO?

ich auch Process Monitor zu überwachen Dateizugriff und gefunden verwendet warum heraus das Programm ist so langsam: es wird tausende von Leseoperationen auf der mdb-Datei zu tun, auch wenn das Programm im Leerlauf ist. Über das Netzwerk ist dieser Kurs von ungeheuer langsam:

Process Monitor Trace http://img217.imageshack.us/img217/1456/ screenshothw5.png

Die eigentliche Frage:

Gibt es eine Möglichkeit, die Abfragen zu überwachen, die für die Leseaktivität verantwortlich sind? Gibt es einen Trace-Flag I einstellen kann? Einhaken des JET DLL? Ich denke, das Programm einige teure Abfragen zu tun, dass JET verursachen viele Daten in den Prozess zu lesen.

PS: Ich habe bereits versucht, die mdb auf unserem Unternehmens-Dateiserver mit dem Erfolg zu setzen, dass es sogar noch langsamer als über die lokale Freigabe zugreifen. Ich habe auch versucht die Verriegelungsmechanismen (Opportunistic Locking) Wechsel auf dem Client ohne Erfolg.

Ich will wissen, was los ist und ein paar harte Fakten und Anregungen für unsere Kunden Entwickler müssen ihm helfen, / ihr das Programm schneller machen.

War es hilfreich?

Lösung

Um Ihre schmuddeligen Hände auf genau das zu bekommen, was Access-Abfrage weise hinter den Kulissen tut es gibt eine nicht dokumentierte Funktion namens JETSHOWPLAN - wenn in der Registrierung eingeschaltet es eine showplan.out Textdatei erstellt. Die Details sind in diesem TechRepublic Artikel alternative , hier zusammengefasst:

  

Das war Showplan Option Jet hinzugefügt 3.0 und erzeugt eine Textdatei   dass enthält die Abfrage-Plan. (Showplan nicht unterstützt Unterabfragen.)   Sie müssen es aktivieren, indem Sie einen Debug Schlüssel zur Registrierung hinzufügen wie folgt:

\\HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\JET\4.0\Engines\Debug
     

Unter der neuen Debug-Taste, fügen Sie einen String-Datentyp namens JETSHOWPLAN   (Sie müssen nur Großbuchstaben verwenden). Dann fügen Sie den Schlüsselwert ON zu   aktivieren Sie die Funktion. Wenn Access wurde im Hintergrund ausgeführt wird, können Sie   schließen muss und Relaunch es für die Funktion zu arbeiten.

     

Wenn Showplan aktiviert ist, Jet erstellt eine Textdatei mit dem Namen SHOWPLAN.OUT   (Die möglicherweise bis in Ihrem My Documents Ordner oder den aktuellen   Standardordner, abhängig von der Version von Jet Sie verwenden) jeden   Zeit Jet erstellt eine Abfrage. Anschließend können Sie diese Textdatei für Hinweise anzuzeigen   auf, wie Sie Ihre Abfragen ausgeführt Jet.

     

Wir empfehlen, dass Sie diese Funktion deaktivieren, indem Sie den Schlüssel des Wertänderungs   OFF, wenn Sie es speziell verwenden. Jet anhängt den Plan   eine vorhandene Datei und schließlich verlangsamt sich der Prozess tatsächlich Dinge   Nieder. Schalten Sie die Funktion nur, wenn Sie eine bestimmte Bewertung benötigen   Abfrage-Plan. Öffnen Sie die Datenbank, führen Sie die Abfrage, und deaktivieren Sie die   Funktion.

Für Alptraum Probleme aufzuspüren es ist unschlagbar - es ist das, was Sie auf Ihrem groß teure Industrie Datenbanken erhalten - diese Funktion ist cool - es ist schön und flauschig - es ist mein Freund ...; -)

Andere Tipps

Könnten Sie nicht einen Paket-Sniffer (wie Wireshark) im Netzwerk werfen und den Datenverkehr zwischen einem Benutzer und dem Host-Rechner sehen?

Wenn es eine ODBC-Verbindung verwendet Sie die Protokollierung für das aktivieren.

  1. Starten Sie ODBC-Datenquellen-Administrator.
  2. Wählen Sie die Registerkarte Tracing
  3. Wählen Sie die Start-Tracing Schaltfläche Jetzt.
  4. Wählen Sie Nehmen oder OK.
  5. Starten Sie die App für eine Weile.
  6. Zurück zur ODBC Administrator.
  7. Wählen Sie die Registerkarte Tracing.
  8. Wählen Sie die Stop-Tracing Schaltfläche Jetzt.
  9. Die Spur kann in der Lage sehen, die Sie zunächst in der Log-Datei Feld Pfad angegeben.

Erste Frage: Haben Sie eine Kopie von MS Access 2000 oder besser

Wenn ja: Wenn Sie sagen, die MDB ist „Passwort geschützt“, meinen Sie, dass, wenn Sie versuchen, es zu öffnen, MS Access verwenden Sie nur für ein Kennwort eine Aufforderung erhalten, oder es Sie nach einem Benutzernamen und das Kennwort nicht aufgefordert? (Oder geben Sie eine Fehlermeldung, die sagt: „Sie haben nicht die erforderlichen Berechtigungen haben die foo.mdb Objekt zu nutzen.“?)

Wenn es letzteres (Sicherheit auf Benutzerebene), suchen Sie nach einer entsprechenden MDW-Datei, die zusammen mit der MDB geht. Wenn Sie es finden, das ist die „Arbeitsgruppen-Informationsdatei“, die als „Schlüssel“ zum Öffnen der MDB verwendet wird. Versuchen Sie, eine Desktop-Verknüpfung mit einem Ziel wie:

"Path to MSACCESS.EXE" "Path To foo.mdb" /wrkgrp "Path to foo.mdw"

MS Access sollte dann aufgefordert, Ihren Benutzernamen und das Passwort, die (hoffentlich) das gleiche wie das, was die VB6 App fragt nach. Dies würde zumindest können Sie die MDB-Datei zu öffnen und an der Tabellenstruktur, um zu sehen, ob es irgendwelche offensichtlichen Konstruktionsfehler.

Darüber hinaus, soweit ich weiß, ist Eduardo richtig, dass Sie ziemlich viel Bedarf, einen Debugger auf der Entwickler-Source-Code auszuführen, genau herauszufinden, was die Echtzeitabfragen tun ...

Es ist nicht möglich, ohne die Hilfe der Entwickler. Es tut uns Leid.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top