PDA

View Full Version : Bug in 7.1



andreaspr@aon.at
14-11-11, 10:09
Hallo,

mein Kollege hat scheinbar einen Bug in SQL (7.1) gefunden.

Folgendes ist passiert:

Delete From Tab1 where CO = 1 and WF = 'XXX' and SA = 'YYY'

Es gibt ein LF TAB1L2 (DDS) mit den entsprechenden Keys und SA CMP(EQ 'XY')

Dem Plancache zufolge verwendet der Optimizer für die Auswahl der Sätze die TAB1L2.
Beim Lesen der TAB1L2 ist zu sehen, dass NUR die Schlüsselwörter CO = 1 und WF = 'XXX' verwendet werden.
Grundsätzlich auch richtig so, da dieses LF nur Sätze beinhaltet mit SA = 'XY', wenn in der Delete-Bedingung auch SA='XY' stehen würde!!

Fehler:
Es werden Sätze der SA (Satzart) 'XY' gelöscht und nicht die mit 'YYY'.

Im "Final Select" Schritt sind im Satz "Host Variable Values" die korrekten Werte (1, 'XXX', 'YYY'). Dennoch wird die TAB1L2 verwendet.

Ursache:
Der Grund warum ein falsches LF verwendet wurde, dürfte der sein, dass das gleiche DELETE zuvor mit SA='XY' ausgeführt wurde.

Drehe ich nun den Spieß um und führe zuerst das DELETE mit SA = 'YYY' aus, so wird für beide DELETEs auf die TAB1L3 (SA CMP(EQ 'YYY') zugegriffen. Ein ab und anmelden ist zuvor jedoch notwendig.

Fuerchau
14-11-11, 10:18
Der Optimzer hat halt mit solchen LF's eben seine Schwierigkeiten. Deshalb sollte man diese Option der Verwendunge in der QAQQINI auf jeden Fall wieder ausschalten (also wieder Default).

Besser war es schon immer, einen entsprechenden Index anzulegen.

Ansonsten mal eine Meldung an die IBM abgeben, vielleicht gibts ja dann ein PTF.

andreaspr@aon.at
14-11-11, 10:24
Der Optimzer hat halt mit solchen LF's eben seine Schwierigkeiten. Deshalb sollte man diese Option der Verwendunge in der QAQQINI auf jeden Fall wieder ausschalten (also wieder Default).

Habens probiert, hat der Optimizer aber erfolgreich ignoriert. :)

Mein Kollege wird demnächst eine Meldung machen. Danach werden wir dann auf PTFs warten müssen.

B.Hauser
14-11-11, 11:15
Der Optimzer hat halt mit solchen LF's eben seine Schwierigkeiten. Deshalb sollte man diese Option der Verwendunge in der QAQQINI auf jeden Fall wieder ausschalten (also wieder Default).

Besser war es schon immer, einen entsprechenden Index anzulegen.

Ansonsten mal eine Meldung an die IBM abgeben, vielleicht gibts ja dann ein PTF.

Das klappt ab Release 7.1 nicht mehr, da auch der SQE Optimizer DDS beschriebene logische Dateien verwenden kann.

... und der Default für IGNORE_DERIVED_INDEX in der QAQQINI ist seit Release 6.1 *YES!

M.E. ist das ein Bug und sollte gemeldet werden!

Birgitta

Fuerchau
14-11-11, 11:21
Da habe ich dann mal den Wert schnell von *DEFAULT auf *YES geändert!

andreaspr@aon.at
14-11-11, 11:41
Dieses Problem tritt scheinbar auch NUR beim DELETE auf.
UPDATE und SELECT funktionieren einwandfrei.

Und ab 7.1 gibt es den IGNORE_DERIVED_INDEX Eintrag nicht mehr. Kann aber hinzugefügt werden. Derzeit wird es vom Trigger noch erlaubt. Auch wenn es sich nix bringt.

lg Andreas