PDA

View Full Version : SQL Abfrage läuft unter V7R2 langsamer als unter V6R1



balu40
04-02-16, 14:12
Hallo!

Wir haben ein Problem mit der SQL Performance unter V7R2, ich muß vorwegschicken, dass ich von SQL selbst keine Ahnung habe. Ein mit DBVisualizer erstelltes Statement läuft bei identischer HW-Umgebung und identischem Datenbestand unter V61 3 sek, auf V72 17,5 sek.

Es gibt in beiden Fällen keine QAQQINI, Ressourcen wie gesagt, sind gleich! Die Ergebnisse sind identisch, gleich ob über DBVisualizer oder nativ auf der aufgerufen!

Irgendeine Idee???

Besten Dank

Volker

SELECT DISTINCT
AN.ID AS ID,
AN.VERTRAGSNUMMER AS VERTRAGSNUMMER,
AN.SPARTE AS SPARTE,
AN.ANWENDUNG AS ANWENDUNG,
AN.KD_ADR_NR AS KD_ADR_NR,
AN.FP_NAME AS FP_NAME,
AD.ADR_NR AS CHK_KD_ADR_NR,
AN.VP_ADR_NR AS VP_ADR_NR,
AD2.ADR_NR AS CHK_VP_ADR_NR,
AN.ANFRAGE_DATUM AS ANFRAGE_DATUM,
AN.STATUS AS STATUS,
COALESCE (KE.KREDITENTSCHEIDUNG, 'U') AS KREDITENTSCHEIDUNG,
KE.AUFLAGEN AS AUFLAGEN,
KE.RAHMENHOEHE AS RAHMENHOEHE,
AN.FINANZIERUNGART AS FINANZIERUNGART,
AN.VERTRAGSWERT AS VERTRAGSWERT,
AD.NAME_1 AS KD_NAME_1,
AD.NAME_2 AS KD_NAME_2,
AD.NAME_3 AS KD_NAME_3,
AD2.NAME_1 AS VP_NAME_1,
AD2.NAME_2 AS VP_NAME_2,
AD2.NAME_3 AS VP_NAME_3,
O.OBJEKTTEXT AS PRODUKTGRUPPE_BEZEICHNUNG,
PG.PRODUKTBEREICH AS PRODUKTBEREICH,
PB.PRODUKTBER_BEZEICHNUNG AS PRODUKTBER_BEZEICHNUNG,
DA.DARLEHENSNUMMER AS DARLEHENSNUMMER
FROM
ANIS.ANFRAGE AN
LEFT OUTER JOIN
ADRESSEN.ADRESSE AD
ON
(
AN.KD_ADR_GR = AD.ADR_GR
AND AN.KD_ADR_NR = AD.ADR_NR )
LEFT OUTER JOIN
ADRESSEN.ADRESSE AD2
ON
(
AN.VP_ADR_GR = AD2.ADR_GR
AND AN.VP_ADR_NR = AD2.ADR_NR )
LEFT OUTER JOIN
ANIS.KALKULATION KA
ON
(
AN.KALKULATION_ID = KA.ID )
LEFT OUTER JOIN
ANIS.OBJEKT O
ON
(
O.ID = KA.HAUPTOBJEKT_ID )
LEFT OUTER JOIN
ANIS.KREDITENTSCHEIDUNG KE
ON
(
AN.ENTSCHEIDUNG_ID = KE.ID )
LEFT OUTER JOIN
STAMMD.T_PRODUKTGRUPPE PG
ON
(
O.PRODUKTGRUPPE_OBJEKT = PG.PRODUKTGRUPPE_OBJEKT
AND O.PRODUKTGRUPPE_HERSTELLER = PG.PRODUKTGRUPPE_HERSTELLER
AND O.PRODUKTGRUPPE_TYP =PG.PRODUKTGRUPPE_TYP)
LEFT OUTER JOIN
STAMMD.T_PRODUKTBEREICH PB
ON
(
PG.PRODUKTBEREICH = PB.PRODUKTBEREICH)
LEFT OUTER JOIN
ANIS.IFG_RAHMEN RA
ON
(
AN.RAHMEN_ID = RA.ID)
LEFT OUTER JOIN
ANIS.IFG_DARLEHEN DA
ON
(
RA.DARLEHEN_ID = DA.ID)
WHERE
(
AN.VERTRAGSNUMMER=7178311
OR DA.DARLEHENSNUMMER=7178311)

Fuerchau
04-02-16, 14:28
Der V7-Optimizer funktioniert leider etwas anders als der V6-Optimizer.
Solches Verhalten habe ich auch schon festgestellt.
Insbesonders ist es wichtig, dass bei den Join- und Where-Bedingungen auch die Feldtypen zu einander passen müssen.
Wenn hier in irgendeiner Form ein Cast durchgeführt werden muss wird der SQL halt langsamer.

balu40
04-02-16, 15:09
Danke für den Hinweis,
ich habe den mal so an unsere Developer weitergeben.

Gruß

Volker

BenderD
04-02-16, 18:00
... wenn das denn noch geht, sollte man mal den access plan unter V6 ansehen - ohne das statement analysiert zu haben, könnte da ein order by den query Optimizer in die richtige Richtung schubsen (wobei 3 sec, nicht wirklich schnell waren ud 17 sec nicht wirklich langsam sind)

D*B