DB2 Connect Benutzerhandbuch

Anwendungsentwurf

Beim Erstellen einer Anwendung kann u. a. durch folgende Maßnahmen eine Leistungssteigerung bewirkt werden:

Compound-SQL-Anweisungen und gespeicherte Prozeduren

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.

Gruppieren von Anforderungen

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

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.

Datenblockung

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.

SQL-Anweisungen mit Blockung

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).

Statisches und dynamisches SQL

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:

Andere Überlegungen zu SQL

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.


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]