![]() |
||||||||||
|
19. Mai 2013 |
||||||||||
|
Release V5R4M0 Neues in Datenbank und SQL In den letzten Releases hat IBM die Datenbank, die im Betriebssystem der iSeries (System i) integriert ist, von Grund auf verändert und wichtige Erweiterungen implementiert. Der Schwerpunkt der Entwicklung liegt dabei auf SQL (Structured Query Language). Allerdings kamen beim nativen Dateizugriff und der Definition von Datenbankobjekten über DDS (Data Description Specification) nur geringfügige Änderungen hinzu. Mit Release V5R4 hat sich dieser Trend ungebrochen fortgesetzt. Mit dem Erfolg, dass die DB2 UDB for iSeries die erste Datenbank ist, die den von ISO (International Organization for Standardization) festgelegten Standard für SQL (aktuell SQL-2003 http://www.sigmod.org/sigmod/record/issues/0403/E.JimAndrew-standard.pdf)zu hundert Prozent abdeckt. Auf die wichtigsten Neuerungen – wie OLAP- (OnLine Analytical Processing-) Ranking-Funktionen, RCTE (Recursive Common Table Expression), Instead Of Triggers, neue beziehungsweise erweiterte Analyse-Tools unter der iSeries Navigator-Datenbank – werden wir in einer Reihe von Artikeln näher eingehen. In diesem Artikel wollen wir uns zunächst mit den erweiterten Datenbanken-Limits beschäftigen – sowie mit den SQL-Statements, die ab Release V5R4 von der SQL Query Enginge (SQE) verarbeitet werden können.
Erweiterte Datenbanken-Limits
Um ein Maximum an Portabilität und Flexibilität zu erreichen, wurden einige der bisherigen Datenbank-Beschränkungen beträchtlich erweitert:
Von der Classic Query Engine (CQE) zur SQL Query Engine (SQE)
In den letzten Releases wurde Schritt für Schritt eine neue Query Engine zur Verarbeitung von SQL-basierten Datenbankabfragen eingeführt: SQL Query Engine (SQE). Die neue Query Engine wurde im OO- (= objektorientiert) Design erstellt und kann dadurch wesentlich flexibler agieren als die klassische (classic) Query Engine (CQE). Sämtliche Neuentwicklungen im Bereich von SQL-Abfragen und deren Optimierung erfolgen in und für die neue SQE. Abfragen, die mit CQE bearbeitet werden müssen, können von diesen Neuerungen nicht profitieren. Die Entscheidung, durch welche der beiden Query Engines die Bearbeitung einer Abfrage erfolgt, trifft der Query Dispatcher, an den sämtliche Datenbankenabfragen zunächst geleitet werden. Die einzige Möglichkeit, auf die Entscheidungen des Query Dispatchers Einfluss zu nehmen, ist über die Art, wie eine SQL-Abfrage erstellt wird – zum Beispiel: die Syntax oder die Vermeidung von Features, die SQE nicht verarbeiten kann. Mit jedem neuen Release wurden der SQE neue Funktionalitäten zugefügt, sodass immer weniger Abfragen von der CQE bearbeitet werden müssen. Mit Release V5R4 können nun auch Abfragen mit den folgenden Funktionalitäten von der SQE verarbeitet werden:
Select * Bild 01: Select-Statement mit Referenz auf UDTF SQL-Statements, in denen UDTF verwendet werden, werden vorerst noch von der CQE bearbeitet. • Verwendung des DB2-Multisystems Bei Verwendung von DB2-Multisystem können Datenbankdateien auf mehreren iSeries- (System i-) Servern oder in mehreren Partitionen auf der gleichen iSeries (System i) abgelegt werden. Trotz der Verteilung erscheint für den Anwender der Zugriff so, als würden alle Dateien auf seinem lokalen Server liegen und alle Datenbankobjekte zu einer einzigen Datenbank gehören. SQL-Abfragen, die auf solche verteilten Daten zugreifen, können zurzeit nur von CQE abgearbeitet werden. Eine Verarbeitung durch SQE wird wahrscheinlich in einem der nächsten Releases möglich sein. • SQL-Abfragen, die DDS beschriebene logische Dateien verwenden Diese Abfragen werden vermutlich nie von SQE verarbeitet werden können. Um die Verarbeitung durch SQE zu ermöglichen, sollte man entweder direkt auf die physischen Dateien (unabhängig, ob in DDS oder SQL beschrieben) zugreifen oder, wenn es darum geht Programm- in Datenbank-Logik zu verschieben, SQL-Views definieren und verwenden. Da SQL-Views keine Schlüsselinformationen beinhalten, werden diese „logischen Dateien“ immer mit Zugriffs-Pfad-Wartung (Access Path Maintenance) *REBLD angelegt. Das heißt: Sie müssen bei einer Änderung der zugrundeliegenden Tabellen (physischen Dateien) nicht aktualisiert werden. Somit bringt selbst eine Vielzahl von SQL-Views auf ein und der selben Tabelle keine Performance-Einbußen mit sich. Werden DDS-beschriebene logische Dateien in einem SQL-Statement angegeben, wird das SQL-Statement während der Optimierungsphase neu geschrieben. Dabei werden zunächst die Feld-Auswahlen, Join-Informationen und Select-/Omit-Anweisungen aus der logischen Datei ermittelt. Das SQL-Statement wird dahingehend geändert, dass die zugrundeliegenden physischen Dateien (Tabellen) direkt angesprochen werden und dass die Informationen aus der DDS-beschriebenen logischen Datei in Join-Anweisungen und/oder Where-Bedingungen konvertiert werden. Diese Auflösung von DDS-beschriebenen logischen Dateien kann nur durch CQE erfolgen. Schlüsseldefinitionen in den DDS-beschriebenen logischen Dateien werden in diesem Schritt der Optimierung ignoriert. Im zweiten Schritt werden auf der Basis des umgeschriebenen SQL-Statement die optimalen Zugriffswege ermittelt. Da der Bezug zu den ursprünglich im Statement angegebenen logischen Dateien nicht mehr vorhanden ist, werden alle Zugriffswege (geschlüsselte logische Dateien oder SQL Indices), die auf den physischen Dateien (Tabellen) liegen, analysiert. Werden die gleichen Zugriffswege, die in den angegebenen logischen Dateien hinterlegt wurden, verwendet, ist dies mehr oder weniger Zufall. • SQL-Abfragen auf physische Dateien mit logischen Dateien mit Select-/Omit-Anweisungen In vielen Anwendungen ist es nicht möglich, logische Dateien durch SQL-Views zu ersetzen, obwohl SQL-Views und Indices wie jede andere logische Datei mit native I/O verarbeitet werden können. Der Grund liegt darin, dass SQL-Views nicht geschlüsselt sind und eine geschlüsselte Verarbeitung von Join-logischen Dateien in der Regel beim nativen I/O erforderlich ist. Den nativen I/O kurzfristig durch embedded SQL zu ersetzten, ist in den meisten Fällen nicht möglich. Um dennoch SQL-Abfragen mit SQE verarbeiten zu können, kann man seit Release V5R3 in der Abfrage-Optionsdatei QAQQINI die Option IGNORE_DERIVED_INDEX angeben und auf *YES setzen. Diese Angabe bewirkt, dass alle Zugriffswege in DDS-beschriebenen Dateien, die SQL nicht verarbeiten kann, ignoriert werden. Dazu zählen auch logische Dateien mit dem Schlüssel-Wort DYNSLT, mit Select-/Omit-Anweisungen oder logische Dateien, die über mehrere Teildateien definiert wurden. Nach Umstellung der Option IGNORE_DERIVED_INDEX ist eine Analyse der SQL-Statements erforderlich, da unter Umständen Zugriffswege, die zuvor verwendet wurden, jetzt nicht mehr berücksichtig werden und statt eines Index-Zugriffs ein Table Scan erfolgt. Um die optimale Performance zu erreichen, müssen eventuell zusätzliche Indices angelegt werden. • Non-SQL-Abfragen Von SQE können nur echte SQL-Abfragen verarbeitet werden, dazu zählen interaktives SQL, embedded SQL, ODBC und JDBC-Zugriffe. Query/400 oder OPNQRYF sind keine SQL-Abfragen und werden auch weiterhin von der CQE bearbeitet. Dies war eine kurze Einführung über die Erweiterungen in den Datenbanken-Limits unter V5R4. Sie haben Möglichkeiten erfahren, Abfragen so zu steuern, dass sie von SQE verarbeitet werden, damit Sie die Vorteile der neuen Query Engine nutzen können. In den folgenden Artikeln werden weitere Neuerungen und Ergänzungen im Bereich Datenbank, SQL-Programmierung, Performance-Analyse und Optimierung besprochen.
|
|
||||||||
|
|
|
|||||||||
|
© 2010 | ITP VERLAG GmbH | Alle Rechte vorbehalten. |
||||||||||