Statische und dynamische Ausführung von SQL-Anweisungen für die pureQuery-Clientoptimierung

In einer DB2-Datenbank können Sie SQL-Anweisungen statisch oder dynamisch ausführen. Für die statische Ausführung müssen Sie die Datenbank so konfigurieren, dass sie eine SQL-Anweisung ausführt, aber konsistentere Leistung bietet. Die dynamische Ausführung von SQL-Anweisungen ist flexibler, weil sie keine besondere Vorbereitung für die Datenbank erfordert.

Der Unterschied zwischen der statischen und dynamischen Ausführung von SQL-Anweisungen ähnelt dem Unterschied zwischen der Ausführung von Anwendungen, die in einer Compilerprogrammiersprache und einer Interpreterprogrammiersprache geschrieben sind. Wenn Sie eine Compilersprache verwenden, wird der ausführbare Code vor der Ausführung generiert. Wenn Sie eine Interpretersprache verwenden, wird der ausführbare Code während der Ausführung generiert. Ähnlich wie bei der Ausführung einer Interpretersprache entsteht durch das Analysieren einer SQL-Anweisung und Erstellen eines Zugriffsplans ein CPU-Aufwand. Dynamische SQL-Ausführung kann die Anwendungsleistung behindern. Der Hauptunterschied zwischen der statischen und dynamischen SQL-Ausführung besteht darin, dass die statische SQL-Ausführung Programmerstellung und -bindung erfordert, bevor eine Anwendung ausgeführt wird. Dynamische SQL-Ausführung wird während der Ausführung vorbereitet. Dynamische SQL-Ausführung hat möglicherweise bei jeder Ausführung von PREPARE und DESCRIBE zusätzlichen Verarbeitungsaufwand zur Folge.

Dynamische SQL-Anweisungscaches können dazu beitragen, den zusätzlichen Aufwand für PREPARE und DESCRIBE von SQL-Anweisungen zu vermeiden. Ein SQL-Anweisungscache kann auf dem Anwendungsserver und/oder in der DB2-Datenbank angeordnet sein. Die Erzielung einer hohen Cachetrefferquote erfordert in der Regel jedoch sorgfältige Optimierung. Die SQL-Anweisungen müssen ordnungsgemäß codiert werden, um die Chancen eines Cachetreffers ohne Verschwendung von Cachespeicherplatz zu maximieren. In Standardumgebungen ist es schwierig, Gesamtoptimierung zu erzielen.

In vielen Fällen bietet statische SQL-Ausführung schnellere Leistung, konsistentere Antwortzeiten und wesentliche Sicherheitsvorteile. Alle SQL-Anweisungen werden zu einem DB2-Datenbankpaket gebunden. Daher gibt es keine Cachefehler für eine einzelne SQL-Anweisung. Dem Paket werden Ausführungsberechtigungen erteilt, damit allen Benutzern für die zugrunde liegenden Datenbankobjekte keine Berechtigungen erteilt werden müssen. Zudem tragen die zielorientierte Ressourcenzuordnung des Workload-Managements, die für statische Pakete definiert ist, und die Zugriffspfade, die beim Binden von Paketen definiert werden, zur Erzielung konsistenter Antwortzeiten bei.

Sie müssen eine gewisse Prozessplanung für die relativen Unterschiede zwischen einer dynamischen einer statischen SQL-basierten JDBC-Anwendung vornehmen. Die pureQuery-Clientoptimierung führt zwar neue Begriffe und Tools ein, der grundlegende Vordersatz und die Konzepte für die Verwaltung traditioneller statischer Anwendungsimplementierungen wie eine COBOL- oder SQLJ-Anwendung gelten aber auch für statische Anwendungen bei pureQuery-Clientoptimierung. Abhängig vom Anwendungsszenario können sich viele Optionen auf die Implementierung auswirken. Daher sind eine sorgfältige Planung sowie die Berücksichtigung der Optionen für eine erfolgreiche Implementierung notwendig.

DB2-Paketidentifikationsinformationen

Ein DB2-Paket wird durch vier Komponenten angegeben. Während der Programmausführung verwendet pureQuery Runtime die vier Komponenten, um das Paket für statische SQL-Ausführung auf einem DB2-Datenbankserver anzugeben.
Positionsname
Der Name wird vom Zielserver bestimmt, der während der Bindung angegeben wurde. Für die pureQuery-Clientoptimierutng wird die Speicherposition beim Aufruf des pureQuery-Dienstprogramms StaticBinder in der Datenbanknamenkomponente der StaticBinder-Option URL angegeben.

Während der Ausführung wird der Wert für den Positionsnamen von den Anwendungsverbindungsinformationen bestimmt. Positionsnamen für DB2 für z/OS entsprechen Datenbanknamen unter DB2 für Linux, UNIX® und Windows®.

Objektgruppen-ID
Diese ID wird während des Konfigurationsschritts angegeben. Mit der Objektgruppen-ID können zusammengehörige Pakete gruppiert werden. Die SQL-Anweisungen für eine Anwendung bestehen aus mindestens einer Paketobjektgruppe. Es wird nicht empfohlen, alle Pakete aus verschiedenen Anwendungen zu einer einzelnen Objektgruppe zu binden. Objektgruppen sind als eine Gruppe zusammengehöriger Module für eine Anwendung zu betrachten, die in der DB2-Datenbank Paketen zugeordnet werden. Der Wert für die Objektgruppen-ID muss zum Gruppieren logisch zusammengehöriger Pakete verwendet werden. Wenn der Wert für die Objektgruppen-ID nicht festgelegt wird, ist der Standardwert die Zeichenfolge NULLID.

Während der Ausführung kann der Wert für die Objektgruppen-ID als Eigenschaft der Datenquelle festgelegt werden, mit der eine Verbindung angefordert wird. In der Anwendung kann das Sonderregister CURRENT PACKAGESET oder CURRENT PACKAGE PATH so festgelegt werden, dass es den Standardwert überschreibt. Wenn diese Sonderregister in der Anwendung verwendet werden, müssen Sie die Pakete unbedingt für die Objektgruppen binden, die von der Sonderregistereinstellung angegeben werden.

Paketname
Der Paketname wird aus dem Anweisungsgruppennamen in der pureQueryXML-Datei abgeleitet, wenn das pureQuery-Dienstprogramm StaticBinder Pakete in einer Datenbank erstellt. pureQuery Runtime gleicht eine SQL-Anweisung mit einer Anweisung in der pureQueryXML-Datei ab, um sie statisch auszuführen. pureQuery Runtime verwendet den Anweisungsgruppennamen, der die Anweisung enthält, um den Paketnamen zu ermitteln.

Wenn Sie eine pureQueryXML-Datei konfigurieren, geben Sie die zu verwendende Basiszeichenfolge an, um die SQL-Anweisungsgruppennamen mit der Option -rootPkgName des pureQuery-Dienstprogramms Configure zu erstellen.

Der Paketname, der während des Konfigurationsprozesses erstellt wurde, kann während der Ausführung nicht geändert werden.

Konsistenztoken
Das Token wird als hexadezimale Zeitmarke implementiert. Das Konsistenztoken wird von der Java™-Zeitmarke ermittelt, wenn Sie das pureQuery-Dienstprogramm Configure für eine pureQueryXML-Datei ausführen.

Sie können dieselbe pureQueryXML-Datei verwenden, um Pakete auf verschiedenen Zieldatenbanken zu erstellen. Wenn Sie dieselbe pureQueryXML-Datei zur Erstellung von Paketen auf verschiedenen Zieldatenbanken verwenden, wird dasselbe Konsistenztoken für die verschiedenen Zieldatenbanken verwendet, um das Paket während der Ausführung anzugeben.

Wenn das Konsistenztoken nach der Erstellung von Paketen für die Zieldatenbank in der pureQueryXML-Datei geändert wird, kann pureQuery Runtime die Pakete in der Datenbank nicht zum statischen Ausführen von SQL-Anweisungen verwenden.

Während der Ausführung ist der Wert fixiert. Nach der Erstellung von Paketen in einer Datenbank durch die Ausführung des Dienstprogramms StaticBinder mit einer pureQueryXML-Datei dürfen Sie die Konsistenztokens in der pureQueryXML-Datei nicht ändern. Wenn Sie ein Token ändern, kann pureQuery Runtime das der SQL-Anweisung in der Datei zugeordnete Paket nicht angeben.

Zuordnung zwischen erfassten SQL-Daten und DB2-Paketen

pureQuery Runtime legt fest, wann eine SQL-Anweisung statisch ausgeführt wird, indem die SQL-Anweisung und SQL-Informationen wie SQL-Zeichenfolge, Cursor und Vorbereitungsattribute wie der Ergebnistyp, der gemeinsame Zugriff und die Lebensdauer verglichen werden. Wenn SQL-Anweisungen statisch ausgeführt werden, ordnet pureQuery Runtime SQL-Anweisungen, die von der Anwendung ausgegeben werden, der Position, der Objektgruppen-ID, dem Paketnamen und den Konsistenztokeninformationen in der pureQueryXML-Datei zu. pureQuery Runtime greift über diese Zuordnung auf das DB2-Paket zu, das die SQL-Anweisungen enthält, und führt sie statisch aus.

Mit dem pureQuery-Dienstprogramm Configure geben Sie die Merkmale der zu erstellenden DB2-Pakete an, die die SQL-Anweisungen enthalten. Die Merkmale enthalten die Objektgruppen-ID und die Anweisungsgruppe, zu der die Anweisung gehört. Diese Merkmale werden in der pureQueryXML-Datei gespeichert. Das Dienstprogramm Configure speichert auch ein Konsistenztoken mit den Paketinformationen.

Das pureQuery-Dienstprogramm StaticBinder verwendet den Anweisungsgruppennamen in der pureQueryXML-Datei, die Objektgruppen-ID und das Konsistenztoken, um die Paket-ID in der DB2-Datenbank zu erstellen. Die Position wird vom Zielserver ermittelt, den Sie beim Ausführen des Dienstprogramms StaticBinder angeben. Der Paketname basiert auf dem Anweisungsgruppennamen. Informationen dazu, wie das Dienstprogramm StaticBinder einen Paketnamen aus einem Anweisungsgruppennamen erstellt, finden Sie in den Angaben zur Option -rootPkgName in Configure (Dienstprogramm).

Mit den Dienstprogrammen Configure und StaticBinder erstellen Sie Pakete auf einem DB2-Datenbankserver. Mit den entsprechenden Optionen dieser Dienstprogramme können Sie Paketobjektgruppen und Paketversionen zum Verwalten von Paketen auf einem DB2-Datenbankserver erstellen.


Feedback