[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    1.583

    Wie dumm ist der SQL Optimiser eigendlich ..

    Grrr

    habe eine Tabelle mit ca. 8 Mio Datensätzen

    Select f1, f2, f3, ... F11 from Datei where f3 = x and f9 = y
    dauert keine Sekunde, bring 4 Sätze

    Select f1, f2, f3, ... F11 from Datei where f3 = x and f9 = y order by f7, f8, f10
    Dauert 5 Minuten

    With a as (Select f1, f2, f3, ... F11 from Datei where f3 = x and f9 = y)
    select * from a order by f7, f8, f10
    Dauert ebenfalls 5 Minuten

    spätestens bei der With version verstehe ich das NICHT!

    Robi
    Interessante Umfrage zur Nutzung der AS/400

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    4.725
    ... immer wieder dieselbe (falsche) Annahme: with ist nur eine Convinience Klausel und gibt dem Optimizer keine Reihenfolge der Ausführung vor. Mit dem Order by ist das schon ein wenig anders, das kann zu völlig anderen Ausführungsstrategien führen. Lass das doch mal unter DBMON laufen und schau Dir an, was es da macht. Wobei: 5 Minuten bei 8 Millionen Sätzen sehen schon fast nach Bug aus...

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.490
    Nur mal so eine Frage, hast Du einen Index über F7,F8,F10 oder besser F3,F9,F7,F8,F10?
    ... ansonsten mach einen Call bei IBM auf.

    Birgitta

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    1.583
    Nein, einen Index hab ich nicht.
    Brauch ich auch nicht, geht hier um die Kontrolle von Datensätzen in einer interaktiven STRSQL Sitzung.

    aber gerade deshalb...
    Wenn SQL alles 'zu Fuß' sortieren muß, sollte es doch logisch sein, diese zeitaufwändige Tätigkeit nicht auf alle sondern nur auf die eingeschränkte Ergebnismenge durch zu führen.
    Interessante Umfrage zur Nutzung der AS/400

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    4.725
    ... nur wenn der Optimizer vorher eine gültige Abschätzung hat. Aber 5 Minuten sind selbst dann heftig, wenn es sich einen by the fly macht - oder ist die AS400 außen weiß?

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    1.583
    oder ist die AS400 außen weiß?
    <Scherz> keine Ahnung. Hat der Kunde bei einem externen Dienstleister.
    gibt's noch weiße Kisten die mit V7R1 laufen?

    Ich stell mir gerade vor ich muß in der Garage aus meiner Sammelsuriumskiste die Blechschrauben nach größe sortieren. Da ist es ja logisch, das ich, weil ich nicht abschätzen kann ob es nicht schneller geht, den ganzen Inhalt nach größe sortiere, incl. Muttern, Nägeln und Wandhaken ...</Scherz>
    Interessante Umfrage zur Nutzung der AS/400

  7. #7
    Registriert seit
    Nov 2003
    Beiträge
    2.220
    Na, wenn Zeit keine Rolle spielt...

    Zitat Zitat von Robi Beitrag anzeigen
    Nein, einen Index hab ich nicht.
    Brauch ich auch nicht, geht hier um die Kontrolle von Datensätzen in einer interaktiven STRSQL Sitzung.

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    4.725
    ... ohne Witz: es soll Dienstleister geben, die auf einer Mini Büchse mit zu wenig Hauptspeicher an einen Controller die größten Platten dranhängen und dann soviel Workload draufnehmen, dass das weiße Ware schneller hingekriegt hätte - da können 5 Minuten für (fast) nix schon normal sein.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Aug 2009
    Beiträge
    98
    Ich würde mal vermuten, dass der Optimizer nur dann einen Temporary Sort auf die Ergebnismenge macht, wenn die erwartete Ergebnismenge in den Hauptspeicher passt, und zwar unter Berücksichtigung des "fair share", für den ich folgende Definition gefunden habe:

    SQE fair share of memory = Memory Pool Size/ min(Max Active, max(Average Active Used,5))

    The Average Active Used is the larger of the following two:
    • 10% of the Max Active specified for the memory pool
    • Average active in the pool* as reported back by the Storage Management

    * Average active in the pool is defined as:
    • 15 minute rolling average number of users in the pool when paging option is set to*CALC
    • The no. of unique users in the pool in the last 2 seconds when paging option is set to*FIXED

    (https://www.ibm.com/developerworks/i...active-pdf.pdf)

    Interessant wäre, welche Implementierung gewählt wird, wenn das Statement 5 Minuten braucht - ich würde darauf tippen, dass ein temporärer Index erstellt wird. Mit STRDBMON/ENDDBMON und dem Explain aus Access Client Solutions könnte man das relativ leicht herausfinden.

    Mit freundlichen Grüßen,
    Christian Bartels.

  10. #10
    Registriert seit
    Jul 2001
    Beiträge
    2.227
    Zitat Zitat von BenderD Beitrag anzeigen
    ... ohne Witz: es soll Dienstleister geben, die auf einer Mini Büchse mit zu wenig Hauptspeicher an einen Controller die größten Platten dranhängen und dann soviel Workload draufnehmen, dass das weiße Ware schneller hingekriegt hätte - da können 5 Minuten für (fast) nix schon normal sein.

    D*B
    Kenn ich von "Kollegen". Gepflegte Überprovisionierung, ohne den Endkunden zu fragen, was überhaupt laufen soll.

    Andererseits - es gibt Kunden, die bestellen bei "Dienstleistern" eine Umgebung mit X CPW, Y RAM und Z GB Disk. So günstig wie möglich. Und wundern sich dann, wenn sie es günstig kriegen ;-)

    -h
    RZKH GmbH -- Ihre IBM i - Daten sicher im Bunker -> www.RZKH.de

  11. #11
    Registriert seit
    Jun 2001
    Beiträge
    1.583
    Moin,
    da muß ich euch entäuschen ...
    die Kiste ist eher überdimensioniert als zu klein / zu schwach. Wurde von einer sehr renomierten großen Firma gemacht. Und sie läuft sehr gut.

    Nur wenn sie 4 Sätze sortieren muß, ist ihr das zu langweilig und sie sortiert ca 8.000.000

    Sonst wäre dieser Thread nicht entstanden ...
    Interessante Umfrage zur Nutzung der AS/400

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    17.537
    Da kann ich auch nur zustimmen, dass der Optimizer da eher pessimistisch als optimistisch vorgeht.
    Für die schnelle Abfrage ohne Order By wird mit Sicherheit ein Index existieren.
    Für ein erstes Abschätzen wird dann die Index-Statistik (DSPFD) herangezogen. Hier ist im Wesentlichen die Anzahl der unterschiedlichen Schlüssel der Knoten vermerkt. Ab irgendeinem Prozentsatz wird der Index genommen oder eben nicht.
    Kommt nun noch ein Order By dazu (ähnlich auch Group by) entscheidet dann bei fehlenden Indizes der Pessimizer dann auch gerne mal falsch und hält einen Tablescan für besser.

    Allerdings muss ich auch dazu sagen, dass per STRSQL da durchaus anders optimiert wird (FIRSTIO) als z.B. bei embedded SQL oder auch ODBC (ALLIO).
    Wobei ich die Optimize-Klausel da schon ausprobiert habe aber kein abweichendes Ergebnis zustande bekam.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •