Für die Anwendungen, die Ihr Unternehmen entwickelt, muss SQL für die Datenbank GSDB, die unter DB2 ausgeführt wird, statisch ausgeführt werden. In dieser Lerneinheit binden Sie die in der InventoryLevelsData-Schnittstelle enthaltenen SQL-Anweisungen und führen sie statisch aus.
Statisches SQL bietet die folgenden Vorteile:
- Vermeidung des Caches für dynamische Anweisungen
- Die Verwendung von statischem SQL reduziert Konflikte im Cache für dynamische Anweisungen von DB2, wodurch die Leistung für Anwendungen gesteigert wird, die dynamisches SQL verwenden.
- Konsistenz der Zugriffspfade
- Statisches SQL macht Antwortzeiten vorhersagbar und gleichbleibend, indem es Zugriffspfade sperrt, bevor eine Anwendung ausgeführt wird. Im Gegensatz hierzu werden Zugriffspfade für dynamisches SQL während der Laufzeit berechnet.
- Mögliche Leistungssteigerung bei Ihren Anwendungen
- Statisches SQL kann die Leistung Ihrer Anwendungen steigern.
- Da die Zugriffspläne vor der Laufzeit festgelegt werden, brauchen während der Laufzeit keine SQL-Anweisungen vorbereitet zu werden.
- Da keine Anweisung vorbereitet und beschrieben werden muss, erfolgt weniger Datenaustausch im Netz zwischen den Clientanwendungen und den Datenbankservern.
- Statisches SQL erzwingt Datentypen für Hostvariablen oder Parameter, die in Vergleichselementen verwendet werden. Hierdurch wird sichergestellt, dass die Eingabedaten den Zieltypen in der Datenbank entsprechen.
- Verbesserte Sicherheit
- Sie können Benutzern das Zugriffsrecht EXECUTE für DB2-Pakete erteilen, anstatt ihnen Zugriffsrechte für Datenbankobjekte zu erteilen.
- Einfache Überarbeitung von Paketen
- Die Versionssteuerung von DB2-Paketen ermöglicht Ihnen, Pakete erneut zu binden, ohne hierbei Gefahr zu laufen, frühere bessere Zugriffspfade zu verlieren.
Gehen Sie wie folgt vor, um die SQL-Anweisungen, die sich in der
InventoryLevelsData-Schnittstelle befinden, zu binden und statisch auszuführen:
- Suchen Sie im Paketexplorer die Datei
Default.genProps im Ordner pureQueryFolder Ihres Java™-Projekts pureQuery_test: . Klicken Sie doppelt auf die Datei, um sie zum Bearbeiten zu öffnen.
- Geben Sie das Paket und den Namen der Schnittstelle in einer leeren Zeile der Datei Default.genProps an. Sie können das Paket und den Namen manuell eingeben,
pureQuery kann Sie jedoch auch bei der Eingabe unterstützen. Wenn Sie die Unterstützung durch pureQuery
wünschen, gehen Sie wie folgt vor:
- Halten Sie die Steuertaste gedrückt und drücken Sie die Leertaste. Ein kleines Fenster wird geöffnet.
Abbildung 1. pureQuery listet die Schnittstellen im
Java-Projekt auf
- Klicken Sie doppelt auf den Namen der Schnittstelle, deren Name in die leere Zeile gestellt werden soll.
- Geben Sie ein Leerzeichen, ein Gleichheitszeichen und ein weiteres Leerzeichen ein, damit die Zeile wie folgt aussieht:
com.mycompany.pureQuery.test.InventoryLevelsData =
- Legen die Optionen fest, die Sie zum Festlegen des Datensammlungsnamens und des Stammpaketnamens verwenden können. Halten Sie die Steuertaste gedrückt und drücken Sie die Leertaste. Ein anderes kleines Fenster wird geöffnet.
Tipp: Wenn Sie auf eine Option klicken, wird neben der Liste eine Beschreibung dieser Option angezeigt. Sie können auf die Beschreibung klicken und die Bildlaufleiste unten im gelben Fenster verwenden, um den vollständigen Text anzuzeigen.
Abbildung 2. Optionen, die Sie für die Schnittstelle in der Datei Default.genProps angeben können
- Vervollständigen Sie die Zeile wie folgt:
com.mycompany.pureQuery.test.InventoryLevelsData = -collection "GOSALES" -rootPkgName "invlevl"
- Speichern Sie die Datei und klicken Sie in der daraufhin angezeigten Nachricht auf Ja. pureQuery muss die Werte, die Sie in die Datei Default.genProps eingegeben haben, in der
Implementierungsklasse für die Schnittstelle speichern. Beim Binden des in der Schnittstelle befindlichen SQL
sucht das pureQuery-Dienstprogramm StaticBinder in der Implementierungsklasse nach diesen Werten, um zu ermitteln, wie die Datenbankpakete erstellt werden müssen.
- Überprüfen Sie die Struktur der Pakete, die Sie erstellen möchten. Klicken Sie in der Sicht SQL Outline auf die Registerkarte Datenbankpakete.
Tipp: Wenn in der Sicht
SQL Outline weiterhin die in einer Tabelle angeordneten Leistungsdaten angezeigt werden, klicken Sie auf die Schaltfläche
Baumstruktursicht oder Tabellensicht anzeigen (

).
In der Sicht wird zwar nur ein Paket angezeigt, aber Sie werden vier Pakete erstellen, eins für jede Isolationsstufe. Dabei ist zu beachten, dass jedes Paket denselben Stammnamen 'invlevl' aufweist und dieselben SQL-Anweisungen enthält. Wenn Sie ein Paket für nur eine Isolationsstufe erstellen möchten, können Sie dazu die Datei
Default.bindProps bearbeiten. In dieser Datei können Sie Optionen für das Dienstprogramm
StaticBinder angeben, das die Pakete erstellt.
In diesem Lernprogramm können Sie jedoch die Standardeinstellungen der Optionen für das Dienstprogramm StaticBinder
übernehmen.
- Binden Sie das Paket:
- Klicken Sie mit der rechten Maustaste auf den Namen des Pakets und wählen Sie Binden aus. Das Fenster Verbindung auswählen wird geöffnet.
- Wählen Sie die GSDB-Verbindung aus und klicken Sie auf Fertig stellen.
pureQuery führt das Dienstprogramm StaticBinder aus und gibt das Ergebnis dieses Dienstprogramms in der Konsolensicht aus:
================================================================================
Das Dienstprogramm StaticBinder hat das Paket 'invlevl1' für die Isolationsstufe UR (Nicht festgeschriebener Lesevorgang - Uncommitted Read) erfolgreich gebunden.
Das Dienstprogramm StaticBinder hat das Paket 'invlevl2' für die Isolationsstufe CS (Cursorstabilität) erfolgreich gebunden.
Das Dienstprogramm StaticBinder hat das Paket 'invlevl3' für die Isolationsstufe RS (Lesestabilität - Read Stability) erfolgreich gebunden.
Das Dienstprogramm StaticBinder hat das Paket 'invlevl4' für die Isolationsstufe RR (Wiederholbares Lesen - Repeatable Read) erfolgreich gebunden.
Das Dienstprogramm StaticBinder hat 'com.mycompany.pureQuery.test.InventoryLevelsDataImpl' erfolgreich gebunden.
================================================================================
Ergebnisse der Aktivität des Dienstprogramms StaticBinder:
Anzahl der Implementierungsklassen und pureQueryXml-Dateien, für die die Bindeoperation ERFOLGREICH ausgeführt wurde: 1
Das Binden für das Paket 'invlevl' unter Verwendung der GSDB-Verbindung war erfolgreich.
Sie können die Pakete im Datenquellenexplorer überprüfen.
Die Sicht SQL Outline vereinfacht die Paketsuche.
- Klicken Sie in der Sicht SQL Outline mit der rechten Maustaste
auf den Namen des Pakets und wählen Sie Im Datenquellenexplorer suchen aus. Der Datenquellenexplorer wird geöffnet. In dieser Sicht werden die Ordner der
GSDB-Verbindung erweitert, bis die Pakete gefunden wurden und hervorgehoben sind.
- Führen Sie die SQL-Anweisungen statisch aus. Sie können die Daten anschließend
mit den Daten vergleichen, die bei der dynamischen Ausführung der SQL-Anweisungen erfasst wurden.
- Klicken Sie mit der rechten Maustaste auf den Projektordner und wählen Sie aus.
- Öffnen Sie im Fenster Ausführen-Konfigurationen die
Konfiguration, die Sie zum Erfassen der ersten Leistungsdatengruppe verwendet haben. Geben Sie die folgende Zeile in das Feld VM-Argumente der Seite Argumente ein und klicken Sie anschließend auf Anwenden:
-Dpdq.executionMode="STATIC"
- Klicken Sie auf Ausführen.
- Klicken Sie im Projektexplorer mit der rechten Maustaste auf den Projektordner und wählen Sie aus. Prüfen Sie anschließend die Leistungsdaten.
- Wählen Sie in der Sicht SQL Outline das Kontrollkästchen Vergleichen aus. Die Sicht wird aktualisiert. Wenn Ihr Projekt mehr als eine gespeicherte Leistungsdatengruppe enthielt, können Sie eine Gruppe in dem neben dem Kontrollkästchen Vergleichen liegenden Feld auswählen.
Abbildung 3. Steuerelemente zum Vergleichen von LeistungsdatengruppenJede Spalte enthält jetzt eine graue und eine weiße Spalte. Die graue Spalte enthält die aktuellen Leistungsdaten
der statischen Ausführung der
SQL-Anweisungen. Die weiße Spalte enthält die Leistungsdaten der vorhergehenden dynamischen Ausführung derselben SQL-Anweisungen.
Die Sicht vergleicht standardmäßig die Zeit für die Ausführung
der Anweisungen in Millisekunden.
- Verwenden Sie das Feld Anzeigen oben in der Sicht, um die Leistungsdaten auf zwei andere Arten zu vergleichen:
- Differenz
- Die grauen Spalten zeigen die Zeit in Millisekunden für die aktuelle Datei an. Die weißen Spalten zeigen die Differenz zwischen den Zeiten an.
Das folgende Beispiel enthält die Statistikdaten für die erste Anweisung in der Sicht.
Tabelle 1. Die aktuelle Zeit in Millisekunden für die Anweisung im Vergleich zur Differenz zwischen der aktuellen und der vorhergehenden ZeitGesamtzeit |
Maximale Zeit |
Durchschnittliche Zeit |
Minimale Zeit |
18,32 |
11,11 |
15,92 |
-0,25 |
6,11 |
3,70 |
1,11 |
1,08 |
Aus den Abbildungen geht hervor, dass für die vorherige Datei Folgendes gilt:- Die gesamte Ausführungszeit beträgt 11,11 Millisekunden mehr als in der aktuellen Datei
- Die maximale Ausführungszeit beträgt 0,25 Millisekunden weniger als in der aktuellen Datei
- Die durchschnittliche Ausführungszeit beträgt 3,70 Millisekunden mehr als in der aktuellen Datei
- Die Mindestausführungszeit beträgt 1,08 Millisekunden mehr als in der aktuellen Datei
- Prozentsatz
- Die grauen Spalten zeigen die Zeit in Millisekunden für die aktuelle Datei an. Die weißen Spalten zeigen die Differenz zwischen den Zeiten in Prozent an. Das folgende Beispiel enthält wieder die Statistikdaten für die erste Anweisung in der Sicht.
Tabelle 2. Die aktuelle Zeit in Millisekunden für die Anweisung im Vergleich zur Differenz zwischen der aktuellen und der vorhergehenden Zeit (in Prozent angegeben)Gesamtzeit |
Maximale Zeit |
Durchschnittliche Zeit |
Minimale Zeit |
18,32 |
60,66 % |
15,92 |
-1,56 % |
6,11 |
60,66 % |
1,11 |
97,29 % |
Aus den Abbildungen geht hervor, dass für die vorherige Datei Folgendes gilt:- Die gesamte Ausführungszeit ist 60,66 % länger als die Ausführungszeit in der aktuellen Datei
- Die maximale Ausführungszeit ist 1,56 % kürzer als die Ausführungszeit in der aktuellen Datei
- Die durchschnittliche Ausführungszeit ist 60,66 % länger als die Ausführungszeit in der aktuellen Datei
- Die Mindestausführungszeit ist 97,29 % höher als die Ausführungszeit in der aktuellen Datei