Anmelden

View Full Version : sql-Performance



rr2001
25-11-11, 11:03
hallo Leute,
bitte um Hilfe bei sql-Performance-Problem.
Es geht um eine vielfach benutze select-Abfrage
über DDS-erstellte logische Dateien.
Mir ist bekannt, dass sql die Sortierfolge dieser Logischen Files ignoriert. sql baut sich bei jedem Aufruf seine eigenen Sichten auf.
(Für Datei xy wird ein Zugriffspfad erstellt...)
Es wäre doch von Vorteil, mit CREATE INDEX dem vorzukommen.

Aber wie kann ich diesen Index im select-Statement angeben?

Vielen Dank.
RR

BenderD
25-11-11, 11:11
SQL verwendet auch DDS erstellte Zugriffspfade, wenn sie denn weiter helfen! SQL Statements werden immer auf Views (oder Tables) abgesetzt, dann berechnet die Query Engine einen Zugriffsplan, in dessen Berechnung alle bestehenden Zugriffspfade einbezogen werden, passt keiner, wird einer erstellt oder ein Full Table scan ausgeführt.
Setzt man den Job unter Debug, wird all dies im Joblog protokolliert, inklusive Empfehlungen für anzulegende Indexe.

D*B

B.Hauser
25-11-11, 12:04
Wie Dieter schon sagt:
1. Baue das SQL-Statement basierend auf den physischen Dateien auf oder erstelle eine View, in der die Verknüpfungen der physischen Dateien hinterlegt sind und in der die Select/Omit-Anweisungen als Where-Bedingung ausgegeben werden.
2. Führe Dein SQL Statement mit dem iSeries Navigator aus
(iSeries-Navigator öffnen --> Datenbanken --> Datenbank auswählen --> In Kasten rechts unten "Eine SQL Prozedur ausführen " auswählen --> Über JDBC-Setup Bibliotheksliste und Naming setzen --> das SQL Statement eingeben und mit Visual Explain ausführen.
3. Visual Explain sagt Dir u.a. ob und welcher Index erforderlich ist. Viel interessanter aber ist, zu wissen mit welcher Query-Engine das SQL-Statement ausgeführt wird.
Klicke auf Final Select und schaue auf die letzten Einträge auf der rechten Seite.
Sofern die Abfrage von der SQE (SQL Query Engine) ausgeführt wird, prüfe den Index-Advice und lege ggf. die erforderlichen Zugriffswege an. Sofern die Abfrage von der CQE (classic query engine) ausgeführt wird, sagt er Dir auch warum. Da Du aktuell auf logische Dateien zugreifst, wird unweigerlich die alte CQE verwendet! Versuche die Abfrage auf die SQE zu portieren und erstelle anschließend die erforderlichen Indices.

STRDBG bringt nur einen Teil der Informationen, die Visual Explain ausgibt, so kannst Du z.B. nicht feststellen welche Query Engine die Abfrage ausgeführt hat.

Birgitta

rr2001
28-11-11, 08:56
hallo Brigitta,
vielen Dank für deine Ausführung.

Da es sich um ein sql-Statement in der Länge einer DIN-A4-Seite
handelt: wo kann ich in Visual Explain sehen,
wo bei der Ausführung des sql-Statements die meiste Maschinenzeit verwendet wird?

Danke.
RR

andreaspr@aon.at
28-11-11, 10:04
Jeder Node/Step enthält ein Haufen an Informationen.
Bei "Estimated Time Information" siehst du wie lange dieser Prozess gedauert hat.

lg Andreas