Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2007, 15h35   #1
Invité régulier
 
Inscription : avril 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 49
Points : 7
Points : 7
Par défaut Pb avec les stats Oracle

Bonjour,
j'ai un code genere avec Hibernate du genre
Code :
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
 
SELECT *
  FROM (SELECT   ide_patien1_.pati_id_pati AS x0_0_,
                 ide_sejour0_.sejo_id_sejo AS x1_0_,
                 ide_patien1_.pati_nom_usu AS x2_0_,
                 ide_patien1_.pati_nom_nai AS x3_0_,
                 ide_patien1_.pati_prenom AS x4_0_,
                 ide_patien1_.pati_sexe AS x5_0_,
                 ide_patien1_.pati_nip AS x6_0_,
                 ide_patien1_.pati_poids AS x7_0_,
                 ide_patien1_.pati_ind_dec AS x8_0_,
                 ide_patien1_.pati_nom_usu_maj AS x9_0_,
                 ide_patien1_.pati_nom_nai_maj AS x10_0_,
                 ide_patien1_.pati_pre_maj AS x11_0_,
                 ide_patien1_.pati_dat_nai AS x12_0_,
                 bas_uf2_.unfo_code AS x13_0_,
                 bas_uf2_.unfo_libelle AS x14_0_,
                 bas_etabli3_.etab_lib_etb AS x15_0_,
                 bas_etabli4_.etab_lib_etb AS x16_0_,
                 bas_etabli3_.etab_cod_fin AS x17_0_,
                 bas_etabli4_.etab_cod_fin AS x18_0_,
                 bas_catalo6_.cape_code AS x19_0_,
                 bas_catalo6_.cape_libelle AS x20_0_,
                 ide_sejour0_.sejo_dat_deb AS x21_0_,
                 ide_sejour0_.sejo_dat_fin AS x22_0_,
                 ide_sejour0_.sejo_num_sec_soc AS x23_0_,
                 bas_etabli5_.etab_lib_etb AS x24_0_,
                 bas_etabli5_.etab_cod_fin AS x25_0_,
                 ide_sejour0_.sejo_num_sej AS x26_0_,
                 ide_medeci8_.mede_nom_usu AS x27_0_,
                 ide_med_ve7_.mese_dat_deb AS x28_0_,
                 ide_patien1_.pati_dat_dec AS x29_0_,
                 ide_patien1_.pati_dat_dec AS x30_0_,
                 ide_sejour0_.sejo_num_arc AS x31_0_,
                 ide_sejour0_.sejo_statut AS x32_0_
            FROM ide_sejour ide_sejour0_,
                 ide_patient ide_patien1_,
                 bas_uf bas_uf2_,
                 bas_etablissement bas_etabli3_,
                 bas_etablissement bas_etabli4_,
                 bas_etablissement bas_etabli5_,
                 bas_catalogue_pers bas_catalo6_,
                 ide_med_venue ide_med_ve7_,
                 ide_medecin ide_medeci8_,
                 ide_adresse ide_adress9_,
                 bas_type_info bas_type_i11_,
                 bas_catalogue_gen bas_catalo12_,
                 bas_type_info bas_type_i13_
           WHERE ide_sejour0_.sejo_id_pati = ide_patien1_.pati_id_pati
             AND ide_sejour0_.sejo_id_unfo = bas_uf2_.unfo_id_unfo(+)
             AND ide_sejour0_.sejo_id_etab_des = bas_etabli3_.etab_id_etab(+)
             AND ide_sejour0_.sejo_id_etab_pro = bas_etabli4_.etab_id_etab(+)
             AND ide_sejour0_.sejo_id_etab_con = bas_etabli5_.etab_id_etab(+)
             AND ide_sejour0_.sejo_id_cape_ven = bas_catalo6_.cape_id_cape(+)
             AND ide_sejour0_.sejo_id_sejo = ide_med_ve7_.mese_id_sejo(+)
             AND ide_med_ve7_.mese_id_mede = ide_medeci8_.mede_id_mede(+)
             AND (    (1 = 1)
                  AND (ide_patien1_.pati_id_etab = 1059585)
                  AND (EXISTS (
                          SELECT pre_prescr10_.prme_id_prme
                            FROM pre_prescription_liste pre_prescr10_
                           WHERE (pre_prescr10_.prme_ind_pre_val = '0')
                             AND (   (pre_prescr10_.prme_ind_pre_val_temp IS NULL
                                     )
                                  OR (pre_prescr10_.prme_ind_pre_val_temp =
                                                                           '0'
                                     )
                                 )
                             AND (ide_patien1_.pati_id_pati =
                                                    pre_prescr10_.prme_id_pati
                                 ))
                      )
                 AND (ide_patien1_.pati_id_pati = ide_adress9_.adre_id_obj)
                 AND (    bas_type_i11_.tyin_code = 'PATIENT'
                       AND ide_adress9_.adre_id_tyin =
                                                    bas_type_i11_.tyin_id_tyin
                      )
                  AND (    bas_type_i13_.tyin_code = 'TYPE_ADR_PERS'
                       AND ide_adress9_.adre_id_cage =
                                                    bas_catalo12_.cage_id_cage
                       AND bas_catalo12_.cage_id_tyin =
                                                    bas_type_i13_.tyin_id_tyin
                      )
                  AND (    bas_catalo12_.cage_code = 'ADR_PERSO'
                       AND ide_adress9_.adre_id_cage =
                                                    bas_catalo12_.cage_id_cage
                      )
                  AND (    bas_etabli5_.etab_id_etab = 1059585
                       AND ide_sejour0_.sejo_id_etab_con = bas_etabli5_.etab_id_etab(+)
                      )
                  AND (ide_sejour0_.sejo_dat_sup IS NULL)
                  AND (ide_patien1_.pati_dat_sup IS NULL)
                  AND (ide_patien1_.pati_id_pati_mai IS NULL)
                  AND (ide_sejour0_.sejo_ind_incomplet = '0')
                 )
        ORDER BY ide_patien1_.pati_nom_usu ASC)
 WHERE ROWNUM <= 100
Avec les stats compilees cela prend 2 min 45.
Avec les stats deletees cela prend 40 mili secondes.

Pourquoi ??????

Le probleme est que j'ai besoin des stats donc je ne peux pas les deletees....... Merci pour votre reponse.
othon_oda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2007, 15h46   #2
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
De quelle version d'Oracle s'agit-il ?
En 8i, ce genre de problème n'est pas rare.

Il faut que vous compariez le plan d'exécution avec ou sans statistiques.
Et puis vous pouvez tout à fait garder les statistiques, et forcer le mode RULE au sein de votre session durant les tests.
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2007, 15h49   #3
Invité régulier
 
Inscription : avril 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 49
Points : 7
Points : 7
Desole, c'est vrai que j'ai oublie la version Oracle.
C'est une 8.1.7.4

Quand au mode Rule, ce n'est pas un parametre du fichier init.ora ?
othon_oda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2007, 15h53   #4
Invité régulier
 
Inscription : avril 2006
Messages : 49
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 49
Points : 7
Points : 7
Citation:
Envoyé par Pomalaix
De quelle version d'Oracle s'agit-il ?
En 8i, ce genre de problème n'est pas rare.

Il faut que vous compariez le plan d'exécution avec ou sans statistiques.
Et puis vous pouvez tout à fait garder les statistiques, et forcer le mode RULE au sein de votre session durant les tests.
Le probleme, c'est que ce n'est pas du test :'(
Je voudrais savoir d'ou viens ce probleme. J'ai lu et entendu que cela pouvais venir d'un probleme de densite de colonne ou autre chose.
Merci
othon_oda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2007, 16h52   #5
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
Citation:
Envoyé par othon_oda
Le probleme, c'est que ce n'est pas du test
Mais non ce n'est pas un problème !

Vous ouvrez une session SQL*Plus, vous faites
Code :
1
2
SET TIMING ON
SET AUTOTRACE ON EXPLAIN STATISTICS
vous exécutez votre requête et vous notez le plan d'exécution

Si besoin, il faudra d'abord exécuter UTLXPLAN.SQL situé sous %ORACLE_HOME%\rdbms\admin, pour créer la table PLAN_TABLE.

Ensuite, pour ignorer les statistiques vous faites
Code :
ALTER SESSION SET OPTIMIZER_GOAL=RULE;
vous réexécutez la requête et vous comparez le plan d'exécution.
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h39.


 
 
 
 
Partenaires

Hébergement Web