Freigeben über


Leistungsverbesserung bei Aktualisierungs- und Löschvorgängen

Sie können UPDATE- und DELETE-Anweisungen durch folgende Maßnahmen beschleunigen:

  • Hinzufügen von Zeitstempeln zu den Remotetabellen
  • Verwenden der CompareMemo-Eigenschaft
  • Verwenden des Modus "Manuelle Transaktionen"
  • Verwenden der auf einem Server gespeicherten Prozeduren
  • Zusammenfassen von Aktualisierungsanweisungen zu einer Gruppe

Hinzufügen von Zeitstempeln

Wenn Ihr Server den Feldtyp Zeitstempel (Timestamp) bereitstellt, können Sie die für eine Remotetabelle erforderlichen Aktualisierungs-, Einfüge- und Löschvorgänge beschleunigen, indem Sie ein Zeitstempelfeld zu der Tabelle hinzufügen.

Verfügt eine Remotetabelle über ein Zeitstempelfeld, können Sie für die Visual FoxPro-SQL-Eigenschaft WhereType die Option DB_KEYANDTIMESTAMP verwenden. Dadurch wird die Verarbeitung beschleunigt, da Visual FoxPro nur zwei Felder Ihrer Ansicht, nämlich das Schlüsselfeld und das Zeitstempelfeld, gegen die Remotetabelle abgleichen muss, um Aktualisierungskonflikte zu ermitteln. Dadurch, dass nur zwei Felder verglichen werden müssen und nicht alle aktualisierbaren Felder (bei der Option DB_KEYANDUPDATABLE) bzw. alle geänderten Felder (bei der Option DB_KEYANDMODIFIED), bewirkt die Option DB_KEYANDTIMESTAMP, dass weniger Zeit erforderlich ist, um die Remotedaten zu aktualisieren. Weitere Informationen zu den Optionen von WhereType finden Sie unter Erstellen von Ansichten.

Anmerkung   Die Option DB_KEYANDTIMESTAMP vergleicht die Schlüssel- und Zeitstempelfelder nur dann, wenn Ihre Remotetabelle ein Zeitstempelfeld enthält. Wenn Sie DB_KEYANDTIMESTAMP für eine Remotetabelle verwenden, die kein Zeitstempelfeld enthält, vergleicht Visual FoxPro lediglich die Schlüsselfelder.

Der Upsizing-Assistent kann zu Tabellen, die Sie exportieren, automatisch Zeitstempelfelder hinzufügen. Weitere Informationen finden Sie unter Upsizing von Visual FoxPro-Datenbanken im Abschnitt "Zeitstempelspalten".

Tipp   Wenn Sie die Struktur der Basistabelle einer Ansicht auf irgendeine Weise ändern, z. B. durch Hinzufügen eines Zeitstempelfeldes, müssen Sie die Ansicht eventuell neu erstellen. Alle Änderungen, die Sie an den Basistabellen einer Ansicht vornehmen, nachdem die Ansicht verwendet wurde, werden so lange nicht in der Definition der Ansicht berücksichtigt, bis Sie diese neu erstellt haben.

Ausschließen von Memofeldern aus der WHERE-Klausel für Aktualisierungen

Sie können Aktualisierungsvorgänge beschleunigen, indem Sie nach Möglichkeit verhindern, dass Memofelder in Ansichten (Felder vom Typ Memo, Objekt oder Bild) mit den entsprechenden Feldern der Basistabelle verglichen werden. Die CompareMemo-Eigenschaft ist standardmäßig auf Wahr (.T.) eingestellt. Das bedeutet, dass Memofelder automatisch in der SQL WHERE-Klausel, die beim Erstellen einer aktualisierbaren Ansicht erzeugt wird, berücksichtigt werden. Um Memofelder aus der SQL WHERE-Klausel auszuschließen, stellen Sie CompareMemo auf Falsch (.F.) ein.

Verwenden von Transaktionen

Das beste Leistungsverhalten erzielen Sie, wenn Sie mit dem Modus "Manuelle Transaktionen" arbeiten und die Transaktionen selbst verwalten. Im Modus "Manuelle Transaktionen" können Sie bestimmen, wann eine Gruppe von Transaktionen übergeben wird, die dafür sorgt, dass der Server mehr Anweisungen in einem kürzeren Zeitraum verarbeiten kann.

Der Modus "Automatische Transaktionen" ist zeitaufwendiger, da jede Aktualisierungsanweisung standardmäßig in eine eigene Transaktion eingebettet wird. Dieser Modus bietet zwar die größtmögliche Kontrolle über jede Aktualisierungsanweisung, erhöht aber auch den Verwaltungsaufwand.

Im Modus "Automatische Transaktionen" können Sie das Leistungsverhalten verbessern, indem Sie die BatchUpdateCount-Eigenschaft der Ansicht bzw. des Cursors auf einen größeren Wert einstellen. Dies hat zur Folge, dass mehrere Aktualisierungsanweisungen zu einer Aktualisierungsanweisung zusammengefasst werden, die dann in eine Transaktion eingebettet wird. Zu beachten ist allerdings, dass alle Aktualisierungsanweisungen zurückgesetzt werden, wenn irgendeine der gruppierten Aktualisierungsanweisungen fehlschlägt.

Tipp   Die BatchUpdateCount-Eigenschaft wird von einigen Servern nicht unterstützt; Sie sollten diese Eigenschaft auf dem jeweiligen Remoteserver testen, bevor Sie sie in Ihrer Anwendung einsetzen.

Verwenden der auf einem Server gespeicherten Prozeduren

Sie können gespeicherte Prozeduren auf dem Server erstellen, die vorkompiliert sind und daher sehr schnell ausgeführt werden. Entsprechend den Anforderungen Ihres Programms können Sie gespeicherte Prozeduren aufrufen, über SQL Pass-Through Parameter senden und weitere Verarbeitungsschritte auf den Server verlagern.

Beispielsweise könnten Sie die Eingaben des Benutzers lokal sammeln und dann eine SQL Pass-Through-Abfrage ausführen, um die Daten an den Server zu senden und die entsprechende gespeicherte Prozedur aufzurufen. Erstellen Sie hierfür ein Formular für einen lokalen Cursor oder ein Array, in dem die Daten gesammelt werden. Danach schreiben Sie eine Prozedur, die eine SQLEXEC( )-Anweisung erstellt, die den Namen der auf dem Server gespeicherten Prozedur sowie die erforderlichen Parameter umfasst. Anschließend können Sie diese Prozedur zum Click-Ereignis einer Befehlsschaltfläche zuweisen, die die Bezeichnung OK oder Übergeben trägt. Sobald der Benutzer die Schaltfläche gewählt hat, wird die SQL-Anweisung erstellt und von der SQLEXEC( )-Funktion an den Server gesendet. Der Einsatz von auf dem Server gespeicherten Prozeduren kann sehr viel effizienter sein, da gespeicherte Prozeduren auf dem Server kompiliert sind.

Zusammenfassen von Aktualisierungsanweisungen zu einer Gruppe

Wenn Ihre Anwendung viele Datensätze aktualisieren muss, kann es vorteilhaft sein, die Aktualisierungsanweisungen zu einer Gruppe zusammenzufassen, damit sie vom Netzwerk und vom Server effizienter verwaltet werden können. Ob und wie viele Aktualisierungs- (UPDATE-) oder Einfügeanweisungen (INSERT-Anweisungen) zu einer Gruppe zusammengefasst werden, hängt davon ab, auf welchen Wert die BatchUpdateCount-Eigenschaft der Ansicht eingestellt ist. Die Voreinstellung ist 1, d. h., jeder Datensatz wird mit einer Aktualisierungsanweisung an den Server gesendet. Sie können den Netzverkehr verringern, indem Sie der Eigenschaft einen größeren Wert zuweisen, so dass mehrere Aktualisierungsanweisungen zu einer Anweisung zusammengefasst werden.

Tipp   Die BatchUpdateCount-Eigenschaft wird von einigen Servern nicht unterstützt; Sie sollten diese Eigenschaft auf dem jeweiligen Remoteserver testen, bevor Sie sie in Ihrer Anwendung einsetzen.

Um diese Vorgehensweise effizient zu nutzen, sollte für die Verbindung der Ansicht mit optimistischer Tabellenpufferung (Buffering-Eigenschaft gleich 5) gearbeitet werden, und sollten Änderungen idealerweise in jeder Zeile des Cursors auf dieselben Felder beschränkt sein. Die BatchUpdateCount-Eigenschaft einer Ansicht können Sie mit DBSETPROP( ) festlegen. Die BatchUpdateCount-Eigenschaft des Cursors einer aktiven Ansicht lässt sich mit CURSORSETPROP( ) einstellen.

Beschleunigen von Lösch- und Aktualisierungsvorgängen

Mit Hilfe der folgenden Richtlinien zum Einstellen von Ansichts- und Verbindungseigenschaften können Sie Aktualisierungs- und Löschvorgänge beschleunigen. Die BatchSize-Ansichtseigenschaft hat den größten Einfluss auf das Leistungsverhalten.

Objekt Eigenschaft Einstellung Anmerkungen
Umgebung BatchUpdateCount 10 - 30 Zeilen Geben Sie einen höheren Wert für Aktualisierungen kleinerer Datenmengen an. 1 Die Leistung verbessert sich um bis zu 50%. Der Standardwert beträgt 1.
Verbindung Asynchronous (.F.) Verwenden Sie synchrone Verbindungen, um die Leistung um bis zu 50% zu verbessern, es sei denn, Sie möchten in der Lage sein, SQL-Anweisungen während der Ausführung auf dem Server abzubrechen. Der Standard ist synchron.
Verbindung WaitTime nicht anwendbar Um die Leistung im Asynchronmodus zu erhöhen, geben Sie eine kürzere Wartezeit an. Zum Reduzieren der Netzbelastung legen Sie eine längere Wartezeit fest.
Verbindung PacketSize 4 KB bis 12 KB Diese Eigenschaft hat wenig Auswirkungen auf das Leistungsverhalten.

1 Der optimale Wert hängt auch von der Geschwindigkeit Ihres Servers ab.

Das tatsächliche Leistungsverhalten hängt stark von der Konfiguration Ihres Systems sowie von den Anforderungen Ihrer Anwendung ab. Experimentieren Sie mit den aufgeführten Werten, um die für Ihre Konfiguration am besten geeigneten Einstellungen herauszufinden. Die oben angegebenen Empfehlungen sind optimal für einen Clientcomputer, der unter Windows NT, Version 3.5, mit ODBC, Version 2.10, und einem SQL Server-Treiber 2.05, läuft sowie für einen Server, der unter Windows NT, Version 3.5, mit Microsoft SQL Server, Version 4.21 bzw. Version 6.0, läuft.

Siehe auch

Beschleunigung von Formularen | Beschleunigung von Abfragen und Ansichten | Client/Server-Leistungsoptimierung | Optimierung der Verbindungsnutzung | Beschleunigen des Abrufens von Daten | Implementieren einer Client/Server-Anwendung