
Ich habe eine Kalenderanwendung auf MS Access 2013 mit SQL Server als Backend erstellt (jeder Tag im Kalender ist ein Unterformular). Über die Leitung sind etwa 20 Tabellen verbunden Call AttachDSNLessTable([details here])
. Vor Ort ist die Geschwindigkeit in Ordnung, aber wenn ich versuche, über ein VPN darauf zuzugreifen, dauert es etwa 6 Minuten, um einfach den Startbildschirm zu laden. Und alles andere dauert mindestens 5 Mal so lange.
Ich kenne keine alternativen Optionen. Ist es möglich, die Datenbank über das Internet zugänglich zu machen? Würde das die Dinge sogar beschleunigen? Oder sollten wir die Bandbreite des VPN erhöhen? Was ist hier meine beste Option? Danke.
Antwort1
Ihre allgemeine Anwendungsarchitektur (Access mit verknüpften Tabellen) ist für diesen Zweck wahrscheinlich fehlerhaft. Das lässt sich wahrscheinlich (größtenteils) beheben, aber nicht ohne einige Überarbeitungen.
Das Hauptproblem besteht darin, dass Access, wenn es das Frontend ist, selbst feststellt, ob es die gesamte Abfrage zur Verarbeitung an SQLServer übermitteln kann, und häufig zu dem Schluss kommt, dass dies nicht möglich ist. Daher führt es die Abfrage häufig selbst aus, indem es die gesamte Tabelle herunterlädt. Dies gilt insbesondere für Joins, insbesondere wenn nicht für jede der verwendeten Tabellen ein starker Primärschlüssel vorhanden ist.
Hier ist das MS Technet-Dokument zur Leistung für Access Linked Tables mit SQLServer-Backend:https://technet.microsoft.com/en-us/library/bb188204%28v=sql.90%29.aspx
Das Wichtigste ist:
Die Hauptursache für Leistungseinbußen bei Abfragen liegt darin, dass bei einer Abfrage mit sehr großen Tabellen alle Daten aus einer oder mehreren Tabellen auf den Client heruntergeladen werden müssen. Dies kann sogar passieren, wenn Verknüpfungen oder Kriterien den Ergebnissatz auf eine kleine Anzahl von Datensätzen zu beschränken scheinen. Dies liegt daran, dass das Office Access-Datenbankmodul manchmal feststellt, dass es keine vollständige Abfrage an SQL Server senden kann. Stattdessen sendet es mehrere Abfragen, häufig auch Abfragen, die alle Zeilen einer Tabelle anfordern, und kombiniert oder filtert dann die Daten auf dem Client. Wenn die Kriterien eine lokale Verarbeitung erfordern, können sogar Abfragen, die nur ausgewählte Zeilen aus einer einzelnen Tabelle zurückgeben sollen, erfordern, dass alle Zeilen der Tabelle zurückgegeben werden.
- Verwenden Sie die JET/ODBC-Diagnosedienstprogramme, um zu ermitteln, wo die gesamte Arbeit ausgeführt wird.
- Verwenden Sie beim Zugriff, sofern möglich, Snapshot-RecordSets.
- Übertragen Sie die Abfragelogik mit Ansichten und gespeicherten Prozeduren/Funktionen auf den SQLServer.
- Richten Sie solide Schlüssel und Indizes in SQLServer ein und stellen Sie sicher, dass die Indizes nach Bedarf defragmentiert werden.
- Zwischenspeichern häufig verwendeter Daten in Access.
Der obige Link enthält viele gute Ratschläge und technische Details für jemanden in Ihrer Situation. Viel Glück!