PDA

View Full Version : Wie dumm ist der SQL Optimiser eigendlich ..



Seiten : [1] 2

Robi
09-03-18, 09:19
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

BenderD
09-03-18, 09:25
... 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

B.Hauser
09-03-18, 09:27
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

Robi
09-03-18, 09:42
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.

BenderD
09-03-18, 09:52
... 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

Robi
09-03-18, 09:59
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>

Pikachu
09-03-18, 10:56
Na, wenn Zeit keine Rolle spielt...


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

BenderD
09-03-18, 10:56
... 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

Christian Bartels
09-03-18, 12:29
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/ibmi/library/i-maxactive/i-maxactive-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.

holgerscherer
11-03-18, 22:32
... 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