Bonjour
Je viens d'installer un nouveau serveur avec BDD Oracle 11g pour délester un serveur avec Oracle 10G.
C'est deux serveurs (Virtuels) ont les mêmes spécifications hardware.
Mon problème et quel e serveur 11 G est moins performant que mon serveur 10G.....en tout cas pour une requete.
Sur le serveur 10G 12 secondes de Traitement, sur le serveur 11G 1minute et des poussieres......
Cette requete est construite via un document Webi sur un Univers BO XI R2 et voici a quoi elle ressemble
En cherchant d'ou pouvait provenir le problème j'ai refait la requete à la main en sortant les jointures de mon Where et la miracle 12 secondes pour répondre. Voici la requete, celle ci renvoie les même données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 SELECT VEHICULE.PARC, T_AFFECT4.CLIENT, T_AFFECT2.FILIALE, sum(DONNEE_TX.DISTANCE), DONNEE_TX.CONSO_TOT_AVG, sum(DONNEE_TX.CONSO_TOTAL), DONNEE_TX.DATEJ, to_char(DONNEE_TX.DATEJ,'WW'), nvl(INDIVIDU.NOM, TR_TRA_PERSON.NM_NAME), ETABSECT.LIB, SOCIETE.RAIS, DONNEE_TX.ID_CONDUCTEUR, DONNEE_TX.SPEED_AVG, case when (MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12)<30 then '1- Moins de 30 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 30 and MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 < 40 then '2- De 30 à 39 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 40 and MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 < 50 then '3- De 40 à 49 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 50 then '4- Plus de 50 ans' end, sum(DONNEE_TX.CONSO_IDLE), sum(DONNEE_TX.CONSO_COND), MARQUE.LIBELLE, CATVEHIC.LIBELLE, decode(INDIVIDU.SEXE,'F','Femme','Homme'), to_char(DONNEE_TX.DATEJ,'YYYYMM'), round(MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12,2) FROM VEHICULE, t_AFFECT4, t_AFFECT2, DONNEE_TX, TR_TRA_PERSON, INDIVIDU, ETABSECT, SOCIETE, MARQUE, CATVEHIC, VEHICULE_AFFECTATION, INFSAL WHERE ( VEHICULE_AFFECTATION.ID_VEHICULE=DONNEE_TX.PARCID and VEHICULE_AFFECTATION.DATE_DEBUT<=DONNEE_TX.DATEJ and VEHICULE_AFFECTATION.DATE_FIN>DONNEE_TX.DATEJ ) AND ( VEHICULE_AFFECTATION.ID_CLIENT=T_AFFECT4.ID_AFFECT4 ) AND ( VEHICULE_AFFECTATION.ID_FILIALE=T_AFFECT2.ID_AFFECT2 ) AND ( DONNEE_TX.PARCID=VEHICULE.VEHICULE_ID ) AND ( DONNEE_TX.ID_CONDUCTEUR=TR_TRA_PERSON.CNR_EXTCODE ) AND ( VEHICULE.COD_CATEGORIE=CATVEHIC.COD_CATEGORIE ) AND ( VEHICULE.MARQUE=MARQUE.COD_MARQUE ) AND ( INFSAL.NOBUL(+)=1 and( DONNEE_TX.id_conducteur=to_char(INFSAL.individu(+)) and to_number(to_char(DONNEE_TX.datej,'YYYYMM'))= case when to_char(sysdate,'DD')<='09' then to_number(to_char(add_months(to_date(INFSAL.anmois(+),'YYYYMM'),2),'YYYYMM')) when to_char(DONNEE_TX.datej,'YYYYMM')=to_char(sysdate,'YYYYMM') then to_number(to_char(add_months(to_date(INFSAL.anmois(+),'YYYYMM'),1),'YYYYMM')) else to_number(INFSAL.anmois(+)) end ) ) AND ( to_char(INDIVIDU.INDIVIDU(+))=DONNEE_TX.ID_CONDUCTEUR ) AND ( INFSAL.SOCIETE=ETABSECT.SOCIETE(+) AND INFSAL.ETAB=ETABSECT.ETAB(+) AND INFSAL.SECTION=ETABSECT.SECTION(+) ) AND ( INFSAL.SOCIETE=SOCIETE.SOCIETE(+) ) AND ( ( SOCIETE.RAIS = 'GT BRETAGNE' OR T_AFFECT2.FILIALE = 'BRETAGNE' ) AND DONNEE_TX.CONSO_TOT_AVG > 0 AND DONNEE_TX.IND_CONF = '0' AND to_char(DONNEE_TX.DATEJ,'YYYYMM') = '201209' ) GROUP BY VEHICULE.PARC, T_AFFECT4.CLIENT, T_AFFECT2.FILIALE, DONNEE_TX.CONSO_TOT_AVG, DONNEE_TX.DATEJ, to_char(DONNEE_TX.DATEJ,'WW'), nvl(INDIVIDU.NOM, TR_TRA_PERSON.NM_NAME), ETABSECT.LIB, SOCIETE.RAIS, DONNEE_TX.ID_CONDUCTEUR, DONNEE_TX.SPEED_AVG, case when (MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12)<30 then '1- Moins de 30 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 30 and MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 < 40 then '2- De 30 à 39 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 40 and MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 < 50 then '3- De 40 à 49 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 50 then '4- Plus de 50 ans' end, MARQUE.LIBELLE, CATVEHIC.LIBELLE, decode(INDIVIDU.SEXE,'F','Femme','Homme'), to_char(DONNEE_TX.DATEJ,'YYYYMM'), round(MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12,2) HAVING sum(DONNEE_TX.DISTANCE) > 0
Est ce que ce problème de perf et du a un mauvais paramétrage de mon serveur? à la version de Oracle? Peut etre au fait que la requête n'est pas super optimisé. Mais dans ce cas pourquoi un tel écart.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 select VEHICULE.PARC, T_AFFECT4.CLIENT, T_AFFECT2.FILIALE, sum(DONNEE_TX.DISTANCE), DONNEE_TX.CONSO_TOT_AVG, sum(DONNEE_TX.CONSO_TOTAL), DONNEE_TX.DATEJ, to_char(DONNEE_TX.DATEJ,'WW'), nvl(INDIVIDU.NOM, TR_TRA_PERSON.NM_NAME), ETABSECT.LIB, SOCIETE.RAIS, DONNEE_TX.ID_CONDUCTEUR, DONNEE_TX.SPEED_AVG, case when (MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12)<30 then '1- Moins de 30 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 30 and MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 < 40 then '2- De 30 à 39 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 40 and MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 < 50 then '3- De 40 à 49 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 50 then '4- Plus de 50 ans' end, sum(DONNEE_TX.CONSO_IDLE), sum(DONNEE_TX.CONSO_COND), MARQUE.LIBELLE, CATVEHIC.LIBELLE, decode(INDIVIDU.SEXE,'F','Femme','Homme'), to_char(DONNEE_TX.DATEJ,'YYYYMM'), round(MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12,2) from donnee_tx left join infsal on infsal.anmois=to_number(to_char(datej,'YYYYMM')) and to_char(infsal.individu)=donnee_tx.id_conducteur and nobul=1 and anmois='201209' left join individu on to_char(individu.individu)=donnee_tx.id_conducteur join vehicule_affectation on VEHICULE_AFFECTATION.ID_VEHICULE=DONNEE_TX.PARCID and VEHICULE_AFFECTATION.DATE_DEBUT<=DONNEE_TX.DATEJ and VEHICULE_AFFECTATION.DATE_FIN>DONNEE_TX.DATEJ join T_AFFECT4 on VEHICULE_AFFECTATION.ID_CLIENT=T_AFFECT4.ID_AFFECT4 join T_AFFECT2 on VEHICULE_AFFECTATION.ID_FILIALE=T_AFFECT2.ID_AFFECT2 join vehicule on DONNEE_TX.PARCID=VEHICULE.VEHICULE_ID join TR_TRA_PERSON on DONNEE_TX.ID_CONDUCTEUR=TR_TRA_PERSON.CNR_EXTCODE join MARQUE on VEHICULE.MARQUE=MARQUE.COD_MARQUE join CATVEHIC on VEHICULE.COD_CATEGORIE=CATVEHIC.COD_CATEGORIE left join SOCIETE on INFSAL.SOCIETE=SOCIETE.SOCIETE left join ETABSECT on INFSAL.SOCIETE=ETABSECT.SOCIETE AND INFSAL.ETAB=ETABSECT.ETAB AND INFSAL.SECTION=ETABSECT.SECTION where ( ( SOCIETE.RAIS = 'GT BRETAGNE' OR T_AFFECT2.FILIALE = 'BRETAGNE' ) AND DONNEE_TX.CONSO_TOT_AVG > 0 AND DONNEE_TX.IND_CONF = '0' AND to_char(DONNEE_TX.DATEJ,'YYYYMM') = '201209' ) group by VEHICULE.PARC, T_AFFECT4.CLIENT, T_AFFECT2.FILIALE, DONNEE_TX.CONSO_TOT_AVG, DONNEE_TX.DATEJ, to_char(DONNEE_TX.DATEJ,'WW'), nvl(INDIVIDU.NOM, TR_TRA_PERSON.NM_NAME), ETABSECT.LIB, SOCIETE.RAIS, DONNEE_TX.ID_CONDUCTEUR, DONNEE_TX.SPEED_AVG, case when (MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12)<30 then '1- Moins de 30 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 30 and MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 < 40 then '2- De 30 à 39 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 40 and MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 < 50 then '3- De 40 à 49 Ans' when MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12 >= 50 then '4- Plus de 50 ans' end, MARQUE.LIBELLE, CATVEHIC.LIBELLE, decode(INDIVIDU.SEXE,'F','Femme','Homme'), to_char(DONNEE_TX.DATEJ,'YYYYMM'), round(MONTHS_BETWEEN(sysdate,to_date(INDIVIDU.dnai,'YYYYMMDD'))/12,2) HAVING sum(DONNEE_TX.DISTANCE) > 0
Je tiens à préciser que certaines des tables sont des synonyms faisant référence a une autre BDD via un Dblink.
Je n'ai fait aucun paramétrage spécifique sur mon serveur 11G car je n'y connais pas grand chose en Oracle.
D'avance merci de votre aide
Partager