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

    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
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... 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.869
    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
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    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.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... 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.973
    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>
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  7. #7
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    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
    5.286
    ... 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
    121
    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
    Aug 2001
    Beiträge
    2.644
    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
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  11. #11
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    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 ...
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •