Beim Erstellen einer Anwendung kann u. a. durch folgende Maßnahmen eine Leistungssteigerung bewirkt werden:
Bei Anwendungen, die viele Befehle und Antworten senden und empfangen, kann der Systemaufwand des Netzwerks beträchtlich sein. Compound-SQL-Anweisungen und gespeicherte Prozeduren stellen zwei Arten dar, diesen Systemaufwand zu verringern.
Wenn eine Anwendung mehrere SQL-Anweisungen ohne dazwischenliegende Programmlogik sendet, kann eine Compound-SQL-Anweisung verwendet werden. Wenn Programmlogik in den Gruppen von SQL-Anweisungen erforderlich ist, können gespeicherte Prozeduren verwendet werden.
Alle ausführbaren Anweisungen mit Ausnahme der folgenden können in einer Compound-SQL-Anweisung enthalten sein:
CALL FETCH CLOSE OPEN Compound SQL Connect Prepare Release Describe Rollback Disconnect Set connection execute immediate
Das Handbuch SQL Reference enthält weitere Informationen.
Informationen zur Verwendung von Compound-SQL-Anweisungen in einer Anwendung finden Sie in Nicht ganzheitliche Compound-SQL-Anweisung. Informationen zur Verwendung von Compound-SQL-Anweisungen mit dem Importdienstprogramm finden Sie in Verwenden der Import- und Exportdienstprogramme.
Mit gespeicherten Prozeduren kann der Datenaustausch auf dem Netzwerk reduziert werden, weil die Programmlogik auf den Server verlagert wird. In DB2 vor Version 5.0 konnte eine gespeicherte Prozedur nur Ausgabeparameter zurückgeben, und von der Anwendung mußte ein getrennter COMMIT-Befehl abgesetzt werden. Dies führte zu zwei Datenaustauschvorgängen im Netzwerk. In DB2 Version 5.0 und höher können die Daten beim Verlassen der Prozedur automatisch festgeschrieben werden. Sie können auch Ergebnismengen zurückgeben, die die Anwendungslogik auf dem Client minimieren.
Informationen zu gespeicherten Prozeduren finden Sie in Gespeicherte Prozeduren.
Das Gruppieren zusammengehöriger Datenbankanforderungen (SQL-Anweisungen) zu einer Datenbankanforderung kann die Anzahl über das Netzwerk übertragener Anforderungen und Antworten verringern. Wenn z. B. die beiden folgenden Anweisungen:
SELECT COL1, COL2, COL5, COL6 FROM TABLEA WHERE ROW_ID=1 SELECT COL1, COL2, COL5, COL6 FROM TABLEA WHERE ROW_ID=2
zu einer Anweisung gruppiert werden:
SELECT COL1, COL2, COL5, COL6 FROM TABLEA WHERE ROW_ID=1 OR ROW_ID=2
werden weniger Anforderungen über das Netzwerk gesendet.
Es können auch Schlüsselwörter wie IN und BETWEEN verwendet werden, um die Anzahl zurückgegebener Zeilen zu verringern. Außerdem können die Schlüsselwörter WHERE, IN und BETWEEN in Anweisungen UPDATE und DELETE verwendet werden.
Prädikatenlogik kann verwendet werden, um nur die Zeilen und Spalten anzufordern, die tatsächlich benötigt werden. Hierdurch wird der Datenaustausch auf dem Netzwerk und die CPU-Belastung für die Datenübertragung verringert.
Folgende Abfrage sollte beispielsweise nicht verwendet werden:
SELECT * FROM TABLEA
wenn nur die erste Zeile von TABLEA mit ROW_ID=1 benötigt wird oder wenn nur Spalte 1 und Spalte 2 benötigt werden.
Es sollte Datenblockung verwendet werden, wenn große Datenmengen vom Server erwartet werden. Durch Blockung wird die Auslastung der Netzwerkbandbreite verbessert und die CPU-Belastung sowohl des Host- oder AS/400-Datenbank-Servers als auch der DB2 Connect-Workstation verringert.
Jede gesendete und empfangene Nachricht bewirkt unabhängig von ihrer Größe einen bestimmten Grad von CPU-Belastung und eine bestimmte Menge an Systemaufwand im Netzwerk. Durch Datenblockung wird die Anzahl von Nachrichten verringert, die für eine bestimmte Menge übertragener Daten erforderlich ist.
Wenn Blockung verwendet wird, wird die erste Zeile der Daten einer Abfrage erst dann an die Anwendung übergeben, wenn der erste Block empfangen wird. Durch Blockung wird die Abrufzeit für die erste Zeile vergrößert, aber die Abrufzeit für nachfolgende Zeilen wird verkürzt.
Eine andere Überlegung bezieht sich auf die verwendete Menge von Speicher. Die Menge eingelagerter Seiten erhöht sich normalerweise, wenn die Blockung aktiviert wird. Eine vollständige Beschreibung der Blockung bei SNA-Verbindungen finden Sie im Handbuch DRDA Connectivity Guide.
In DB2 Connect kann die Menge der Daten gesteuert werden, die mit jedem Block übertragen wird (siehe RQRIOBLK).
Zum Aktivieren der Blockung kann die Option BLOCKING des Befehls PREP oder BIND verwendet werden. Weitere Informationen finden Sie in Der Befehl BIND. Die Blockung ist aktiviert, wenn folgendes zutrifft:
Definitionen für Cursor mit Lesezugriff, aktualisierbare Cursor und mehrdeutige Cursor finden Sie im Handbuch Application Development Guide.
Anmerkung: | Bei der Verwendung von dynamischem SQL ist der Cursor immer mehrdeutig. |
Aktualisierbare SELECT-Anweisungen (die Anweisungen UPDATE/DELETE WHERE CURRENT OF verwenden) stellen nicht geblockte Abfragen dar, daher sollten sie nur verwendet werden, wenn dies absolut erforderlich ist.
Eine aktualisierbare SELECT-Anweisung stellt sicher, daß die Zeile zwischen dem Zeitpunkt des Beendens von SELECT und dem Zeitpunkt der Eingabe von UPDATE/DELETE nicht geändert wird. Wenn diese Stufe des gemeinsamen Zugriffs für Ihre Anwendung nicht wichtig ist, kann statt dessen DELETE oder UPDATE mit Suchkriterien verwendet werden, die auf von einer nicht aktualisierbaren SELECT-Anweisung übergebenen Werten basieren.
Für SELECT mit Lesezugriff sollte FOR FETCH ONLY angegeben werden (außer unter VM und VSE, da es dort nicht unterstützt wird).
Verwenden Sie so oft wie möglich statisches SQL. Hierdurch werden mehrdeutige Cursor und die Vorbereitung von SQL-Abschnitten zur Laufzeit vermieden. Wenn dynamisches SQL sich nicht vermeiden läßt, können folgende Maßnahmen ergriffen werden, damit der Datenaustausch auf dem Netzwerk minimiert und die Leistung verbessert wird:
Wenn der zugeordnete Wert für den SQL-Deskriptorbereich nicht groß genug zum Speichern des übergebenen SQL-Deskriptorbereichs ist, muß das Programm eine weitere Anweisung DESCRIBE mit einem SQL-Deskriptorbereich absetzen, der groß genug ist, um das Ergebnis erneut zu speichern. Hierdurch wird der Datenaustausch auf dem Netzwerk erhöht.
Folgen aus PREPARE und DESCRIBE sollten nicht verwendet werden. Die Verwendung der Anweisung PREPARE.....INTO bietet eine wesentlich bessere Leistung.
Die Verwendung des Befehlszeilenprozessors ist im allgemeinen langsamer als die Verwendung von dynamischem SQL im Programm, weil der Befehlszeilenprozessor die Eingabedaten syntaktisch analysieren muß, bevor die SQL-Anweisungen an die Datenbanksteuerkomponente übergeben werden. Der Befehlszeilenprozessor formatiert die Daten auch bei deren Eingang, was für die verwendete Anwendung möglicherweise gar nicht erforderlich ist.
SQL-Anweisungen in einer interpretierten Sprache (z. B. REXX) sind wesentlich langsamer als dieselben SQL-Anweisungen in einer Compilersprache (z. B. C).
Es gibt zwei Typen der Anweisung CONNECT, Typ 1 und Typ 2. Bei Verbindungen des Typs 2 wird bei der Herstellung einer Verbindung zu einer Datenbank die vorherige Verbindung in einen Ruhezustand versetzt, aber nicht abgebrochen. Durch das spätere Umschalten zu einer im Ruhezustand befindlichen Verbindung kann der Systemaufwand für das Laden von Bibliotheken und das Einrichten interner Datenstrukturen umgangen werden. Aus diesem Grund kann die Verwendung von Verbindungen des Typs 2 die Leistung von Anwendungen verbessern, die auf mehrere Datenbanken zugreifen. Weitere Informationen zu Verbindungen des Typs 2 finden Sie in den Handbüchern Systemverwaltung und SQL Reference.