Access Performance-Tipps

Aus DBWiki
Wechseln zu: Navigation, Suche

Beitrag zum Thema Performance aus der AEK 7

Einen hervorragenden Beitrag zum Thema "Performance" gab es auf der AEK 7 (Access-Entwickler-Konferenz):

"Performance-Tuning in VBA und Formularen" von Josef Pötzl

Dort wurden u.a. die Code-Ausführungszeiten von vergleichbaren Methoden untersucht.

  • VBA-Code optimieren
  • Benutzerschnittstelle beschleunigen
  • Akademische Diskussionen über Tausendstel-Sekunden vs. Praxisrelevanz
  • Beispiele, Tipps und Vergleichsmessungen

Download des Beitrags unter: http://www.donkarl.com/Downloads/AEK/

Objektnamen-Autokorrektur ausschalten

Schalte die "Objektnamen-Autokorrektur" aus.

Extra -> Optionen -> (Allgemein) -> "Objektnamen-Autokorrektur"

Diese ist zwar sehr nützlich während der Datenbankentwicklung. Im Betrieb kostet sie jedoch nur Performance.

Unterdatenblätter ausschalten

Unterdatenblätter: In Tabellen, Abfragen, Datenblattansicht von Formularen können verknüpfte Daten pro Datensatz angezeigt werden. Das verursacht allerdings oft Performance-Probleme. (Zitat aus http://www.donkarl.com/NeueVersionen/A00.htm)

  • Manuelles Deaktivieren der Unterdatenblätter
    1. Öffne in der Backend-Datenbank eine Tabelle in der Entwurfsansicht.
    2. Klicke im Menü "Ansicht" auf "Eigenschaften".
    3. Setze die Eigenschaft "Name" des Unterdatenblattes auf [NONE].
    4. Speichere und schließe die die Tabelle.

Hierfür müssen die Formulare, die darauf zugreifen, natürlich geschlossen sein.

Autokorrektur ausschalten

Die Einstellung Autokorrektur bzw. Rechtschreibprüfung wird in Access global eingestellt.

Kurzer Serverpfad für das Backend

Verwende einen kurzen Serverpfad für das Backend.

Eine bessere Performance erreichst du, indem du statt der UNC-Namen gleich IP-Adressen verwendest und von den Freigabenamen weg auf den direkten Pfad wechselst. Also z.B.

\\192.168.1.200\d$\MDB\aktuell\DeinBackend.mdb

anstelle von

\\DeinServer\DeineFreigabe\MDB\aktuell\DeinBackend.mdb

Virensuchprogramm

Es ist sinnvoll, die Dateien vom Typ ".LDB" von der Virensuche auszunehmen (sofern der zuständige SysAdmin überzeugt werden kann).

Jet4 Optimierung

Weiterführende Informationen: http://support.microsoft.com/kb/303528/de

Speicherort von Front- und Backend

Das Frontend sollte auf der lokalen Festplatte installiert werden. Wenn das FE nicht lokal liegt, dann werden sämtliche benötigten Codes für das Laden und Aufbauen der Objekte (Formulare) über das Netz transportiert.

Ein schneller PC

... und ausreichend Speicher wirkt bei Performance-Problemen oft Wunder!

Optimierung von Abfragen

  1. LIKE "*Irgendwas*" sollte vermieden werden
  2. In WHERE-Klauseln sollte nur auf indizierte Felder Bezug genommen werden
  3. Funktionen in Abfragen können die Performance bremsen
  4. Vergleichsausdrücke sollten so aufgebaut werden, dass sie Indizes ausnutzen können
Also nicht:
... WHERE Year(MeinDatum) = 2008
sondern:
... WHERE MeinDatum BETWEEN #2008-1-1# AND #2008-12-31#

Nutzerzahlabhängige Performance

Problem:

  • Wenn nur ein Benutzer die Datenbank verwendet -> normale Performance
  • Sobald die Datenbank mehrere Benutzer hat -> Performance sinkt (bei allen Benutzern) um Faktor 10 - 15.

Das Problem liegt am Umgang mit der LDB-Datei und ist auf folgender Seite beschrieben:

Backend-Connection offen halten

Die Backends sollten geöffnet bleiben. Wird die Verbindung zum Backend nur zeitweise geöffnet, so fällt beim weiteren Zugriff auf das Backend zusätzliche Zeit für den Connect an.

Notfalls reicht dazu eine Dummytabelle mit einem Feld und einem Datensatz je Backend, Diese Dummytabelle kann dann als Datenherkunft (Recordsource) für ein ein versteckt geöffnetes Formular herhalten.

Neuaufsetzen (Import in neue Datenbank)

Lege eine neue Datenbank an. Importiere die Objekte dort hinein, Stelle die Verweise und die Einstellungen bei Extras/Start ein, kompiliere.

Große Datenmengen

Wenn der Grund für eine Performance-Einbuße daran liegt, dass man mit sehr großen Datenmengen arbeitet oder sehr komplexe Abfragen nutzt, sollte auf einen SQL-Server zurückgegriffen werden. Grund: Access überträgt immer alle Daten. Hingegen werden beim SQL-Server die Daten selektiert und nur die benötigten gesendet, was um einiges schneller geht.

Maximal 255 User

Die theoretische Obergrenze für Access liegt bei 255 gleichzeitigen Verbindungen - in der Praxis ist aber meist schon wesentlich früher das Ende der Fahnenstange erreicht.

Tabellenbeziehungen

Überdenke den systematischen Aufbau der Tabellenbeziehungen siehe auch:

Sparsamer Umgang mit Funktionen, Feldberechnungen und Formatierungen in Formularen

Überdenke die Notwendigkeit mancher Funktionen (z.B. VBA-gesteuerte werteabhängige Farbmarkierungen, berechnete Felder die beim Öffnen der Formulare bzw. bei jedem Datensatzwechsel für Zeitverzögerung sorgen.

In vielen Fällen ist es ausreichend, beim Datenbankstart einen Wert einer Konstante zuzuweisen statt dies bei jedem Formularwechsel oder schlimmer noch bei jedem Datensatzwechsel neu zu berechnen. In anderen Fällen könnte ein datensatzspezifischer Wert beim Anlegen des Datensatzes bzw. bei dessen Änderungen einmalig berechnet und gespeichert werden. Eine Neuberechnung beim Datensatzwechsel entfällt dann.

Der Funktionalität und Performance sollte der Vorzug zu Ungunsten "optischer Effekte" gegeben werden. Nach dem Motto: ("einfach und schnell" statt "bunt und langsam"). Schließlich handelt es sich um eine Datenbank und nicht um eine poppig animierte Internetseite.

Domänenaggregatfunktionen vermeiden

Domänenaggregatfunktionen wie DSum, DCount und DLookup sind Performance-Bremsen. Alternativ gibt es einige "Ersatzfunktionen", die geschwindigkeitoptimiert arbeiten. Sascha Trowitzsch hat in dieser Richtung einiges entwickelt. Siehe hier: http://www.ms-office-forum.net/forum/showthread.php?postid=286890#post286890

Weitere Tipps

Schau Dich auch mal allgemein hier um:

Regelmäßig komprimieren

Eine weitere effektive Möglichkeit zur Leistungsverbesserung ist das regelmäßige Komprimieren des Datenbank-Backends. (Was aber nicht heißt, dass man das übertreiben sollte - jedes Komprimieren stellt auch ein Betriebsrisiko dar).

Schnellerer Datenbankstart

  • Wenn Sie beim Datenbankstart VBA-Code ausführen wollen und ein Startformular verwenden, sollte dieser Code aus dem Startformular heraus ausgeführt und nicht etwa durch ein Autoexec-Makro aufgerufen werden. Beim Laden des Startformulars wird nämlich automatisch auch das Formularmodul geladen. Dieser Code wird schneller ausgeführt, als der Code in einem Standardmodul, der über ein Autoexec-Makro aufgerufen wird.
  • VBA-Code im Startformular minimieren: Beschränken Sie den VBA-Code in einem Startformular auf das Notwendigste. Vor allem Operationen wie Datenzugriffe oder die Überprüfung von Datenbankobjekten können möglicherweise auch zu einem späteren Zeitpunkt ausgeführt werden. Wenn Sie Ihren Code unter diesen Gesichtspunkten überprüfen und den Ablauf entsprechend ändern, startet Ihre Datenbank schneller und flüssiger.

Optimieren der Netzwerkleistung

Optimieren der Netzwerkleistung von Office Access und der Jet-Datenbank-Engine mit Windows 2000- und Windows XP-Clients.

Zitat: "Wenn Sie ein Programm, das auf der Microsoft Jet-Datenbank-Engine basiert, wie Microsoft Office Access, auf Ihrem Microsoft Windows 2000- oder Microsoft Windows XP-Computer ausführen, scheint das Programm möglicherweise langsamer und weniger zu reagieren als erwartet.

Nachdem Sie Ihren Computer von einem Microsoft Windows NT 4.0-Betriebssystem auf ein Windows 2000-Betriebssystem oder ein Windows XP Professional-Betriebssystem aktualisiert haben, stellen Sie möglicherweise eine Abnahme der Leistung von Office Access oder von Anwendungen, die auf der Jet-Datenbank-Engine basieren, fest. Es treten unter Umständen die folgenden Symptome auf:

  • Das Öffnen einer .mdb-Datei dauert länger als erwartet.
  • Access-Abfragen dauern länger als erwartet.
  • Das Öffnen eines Formulars, das auf einer verknüpften Tabelle in Access basiert, dauert länger als erwartet.
  • Access-Vorgänge, wie das Einfügen, dauern länger als erwartet.
  • Der Vorgang, auf Netzwerkressourcen zuzugreifen, dauert länger als erwartet.

Näheres und eine Abhilfe zum Problem findet man unter: http://support.microsoft.com/kb/889588/de

Insbesondere zu folgenden Themen:

  • Dateiserveroptimierung
  • Verwenden der 8.3-Benennungskonventionen für Dateien
  • Deaktivieren der Zugriffsverletzungs-Benachrichtigungsverzögerung
  • Verschieben der Back-End-Datenbankdatei auf ein NTFS-Dateisystemvolume
  • Deaktivieren der automatischen Erzeugung kurzer Dateinamen
  • Clientoptimierung
  • Aktivieren der erweiterten Dateinamen-Zwischenspeicherung
  • Optimieren von Anfügeabfragen auf Windows XP-Computern
  • Optimieren der Routinen und Methoden der Access- oder Jet-Datenbank-Engine-Datenbanken
  • Empfohlene Verfahren für das Optimieren der Datenbankleistung

Exklusiv öffnen bei alleinigem Zugriff

Nur bei alleinigem Zugriff auf die Datenbank:

Falls Sie an einem Einzelplatzrechner arbeiten oder in einer Netzwerkumgebung nur alleine auf eine Access-Datenbank zugreifen, sollten Sie die Datenbank Exklusiv öffnen. Klicken Sie dazu im Dialogfenster Öffnen auf das nach unten gerichtete Dreieck neben der Schaltfläche Öffnen und markieren Sie den Eintrag Exklusiv öffnen. Dieser Öffnungsmodus kann auch dauerhaft für alle Datenbanken in Access eingestellt werden. Öffnen Sie mit Extras / Optionen das Dialogfenster Optionen und aktivieren Sie dann das Register Weitere. Markieren Sie dann die Option Exklusiv und klicken Sie auf Übernehmen.

Weitere Links zum Thema

U N S O R T I E R T

  • MDE-Format nutzen
  • Optimale Geschwindigkeit mit kompiliertem Code
  • Dekompilierung vermeiden.
  • Konstanten anstatt Variablen benutzen.
  • Option Explicit nutzen
  • richtigen Datentyp benutzen
  • Early Binding (Datentyp Object vermeiden)
  • das Me-Schlüsselwort einsetzen
  • Berechnung mit Integer oder Long Integer anstelle von Gleitkommaoperationen
  • Demand Loading für Module
  • ungenutzten Code entfernen
  • Setze eine Referenz für Active-X-Steuerelemente
  • Minimiere OLE-Verweise
  • Datenbank regelmäßig schließen
  • Ausdrücke in Schleifen vermeiden