IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[oracle 8.0.5] insert très (trop) lent


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Par défaut [oracle 8.0.5] insert très (trop) lent
    Parmis les quelques milliers de requêtes qui sont executées chaque jour sur notre base de données (oracle 8.0.5), une seule me pose de réels soucis.

    > Chaque jour, une requête insert (environ 16000 lignes, 23 colonnes, 10 Mo) dans une table temporaire. Cette insertion, somme toute légère, est extrèmement longue et peut durer plusieurs heures alors que la requête qui l'alimente prend, au plus, quelques minutes.

    > La table cible est préalablement vidée (truncate ou delete, j'ai essayé les deux), et les segments rollbacks sont largement suffisant pour supporter les données de cette transaction. La table est construite avec les options suivantes :NOLOGGING,NOCACHE,NOPARALLEL

    > Aucune autre requête n'est susceptible de verrouiller cette table puisque elle n'est utilisée que dans ce traitement et que, par ailleurs , c'est l'un des premiers traitement à être lancé, la nuit, après le redémarrage de nos bases.

    > J'ajoute que le poids des index est réduit : une clé primaire et un index sur trois colonnes chacun (les mêmes mais dans un ordre différent)

    > Le seul moyen que j'ai cru trouver pour limiter le temps d'execution est de procéder à un rebuild de la table et des index. Je ne suis pas sûr cependant que ce ne soit pas dû à un heureux concours de circonstance et que mon rebuild ne soit aussi efficace qu'un rituel vaudoux.

    Qu'est-ce qui, selon vous, pourrait ralentir à ce point une commande insert ?

  2. #2
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    tu l'as mis en trace pour voir les événements d'attente ?

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    la dernière fois qu'un problème comme ceci (insert trop long pour une requete rapide) a été posée sur le forum, c'était un problème d'extent de la table d'insertion ou d'index qui étaient à quelques Ko.
    Donne les desc de tes tables et indexes.

  4. #4
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Par défaut
    il s'agit d'un script d'insertion ?
    un echantillion si c'est possible ?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    181
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 181
    Par défaut
    voici le une dicussion similaire sur qui a déjà eu lieu sur le Forum
    http://www.developpez.net/forums/sho...d.php?t=209124

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    38
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 38
    Par défaut
    voici la requête d'insertion :

    1 >
    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
    INSERT INTO alm.tb_wdo_vte
                (id_wdo_vte_ref_cla, id_wdo_vte_pvt, id_wdo_vte_emp,
    id_wdo_vte_mci_jou_heu, nb_wdo_vte_prp, nb_wdo_vte_tkv,
    dc_wdo_vte_mnt_ca_net_ht, dc_wdo_vte_mnt_ca_brt_ini,
    dc_wdo_vte_mnt_ca_brt_bas, dc_wdo_vte_mnt_ca_net_ttc,
    dc_wdo_vte_mnt_mrg, dc_wdo_vte_mnt_rab_rem,    dc_wdo_vte_mnt_rem,
                 dc_wdo_vte_vnd_heu, nb_wdo_vte_rmb, nb_wdo_vte_ech,
                 nb_wdo_vte_ret_cli, nb_wdo_vte_qte, dc_wdo_vte_mnt_ret_cli,
                 dc_wdo_vte_mnt_ech, dc_wdo_vte_mnt_rmb, dc_wdo_vte_amp_hor,
                 lb_wdo_vte_sta, nb_wdo_vte_cli)
       SELECT   g_t4.id_ref, g_t3.id_pvt, g_t3.id_emp,
                TO_NUMBER (TO_CHAR (g_t3.dt_ent_tkv, 'yyyymmddHH24')), 0, 0,
                SUM ((  (  (g_t1.dc_lig_tkv_prx_ven_brt * g_t1.nb_lig_tkv_qt)
                         - g_t1.dc_lig_tkv_mnt_rem
                        )
                      - g_t1.dc_lig_tkv_mnt_tva
                     )
                    ),
                SUM ((g_t2.dc_prx_brt_ini * g_t1.nb_lig_tkv_qt)),
                SUM ((g_t1.nb_lig_tkv_qt * g_t2.dc_prx_brt_bas)),
                SUM ((  (g_t1.dc_lig_tkv_prx_ven_brt * g_t1.nb_lig_tkv_qt)
                      - g_t1.dc_lig_tkv_mnt_rem
                     )
                    ),
                (  SUM ((  (  (g_t1.dc_lig_tkv_prx_ven_brt * g_t1.nb_lig_tkv_qt)
                            - g_t1.dc_lig_tkv_mnt_rem
                           )
                         - g_t1.dc_lig_tkv_mnt_tva
                        )
                       )
                 - SUM ((g_t1.nb_lig_tkv_qt * g_t2.dc_prmp))
                ),
                (  SUM ((  (g_t2.dc_prx_brt_bas - g_t1.dc_lig_tkv_prx_ven_brt)
                         * g_t1.nb_lig_tkv_qt
                        )
                       )
                 + SUM (g_t1.dc_lig_tkv_mnt_rem)
                ),
                SUM (g_t1.dc_lig_tkv_mnt_rem), 0, 0, 0, 0,
                SUM (g_t1.nb_lig_tkv_qt), 0, 0, 0, 0, 'AA', 0
           FROM ods.tb_o_lig_tkv@xdwa g_t1,
                alm.tb_wdo_prx_ref_jou@xdwa g_t2,
                ods.tb_o_ent_tkv@xdwa g_t3,
                ods.tb_o_uvc@xdwa g_t4
          WHERE g_t3.id_tps_jou = g_t2.id_jou
            AND g_t1.id_uvc = g_t4.id_uvc
            AND g_t3.id_ent_tkv = g_t1.id_ent_tkv
            AND g_t3.id_tps_jou >= TO_NUMBER (TO_CHAR (:1, 'yyyymmdd'))
            AND g_t1.cd_lig_tkv_typ <> 'MVTFI'
            AND g_t4.id_ref = g_t2.id_uvc
       GROUP BY TO_NUMBER (TO_CHAR (g_t3.dt_ent_tkv, 'yyyymmddHH24')),
                g_t4.id_ref,
                g_t3.id_pvt,
                g_t3.id_emp


    2 > Le script de création de la table et des index sont les suivants :
    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
    82
    83
    84
    CREATE TABLE ALM.TB_WDO_VTE
    (
      ID_WDO_VTE_REF_CLA         NUMBER(15),
      ID_WDO_VTE_PVT             NUMBER(15),
      ID_WDO_VTE_MCI_JOU_HEU     NUMBER(15),
      NB_WDO_VTE_PRP             NUMBER(38),
      ID_WDO_VTE_EMP             NUMBER(15),
      NB_WDO_VTE_TKV             NUMBER(38),
      DC_WDO_VTE_MNT_CA_NET_HT   NUMBER(16,6),
      DC_WDO_VTE_MNT_CA_BRT_INI  NUMBER(16,6),
      DC_WDO_VTE_MNT_CA_BRT_BAS  NUMBER(16,6),
      DC_WDO_VTE_MNT_CA_NET_TTC  NUMBER(16,6),
      DC_WDO_VTE_MNT_MRG         NUMBER(16,6),
      DC_WDO_VTE_MNT_RAB_REM     NUMBER(16,6),
      DC_WDO_VTE_MNT_REM         NUMBER(16,6),
      DC_WDO_VTE_VND_HEU         NUMBER(12,2),
      NB_WDO_VTE_RMB             NUMBER(38),
      NB_WDO_VTE_ECH             NUMBER(38),
      NB_WDO_VTE_RET_CLI         NUMBER(38),
      NB_WDO_VTE_QTE             NUMBER(38),
      DC_WDO_VTE_MNT_RET_CLI     NUMBER(16,6),
      DC_WDO_VTE_MNT_ECH         NUMBER(16,6),
      DC_WDO_VTE_MNT_RMB         NUMBER(16,6),
      DC_WDO_VTE_AMP_HOR         NUMBER(12,2),
      LB_WDO_VTE_STA             VARCHAR2(2),
      NB_WDO_VTE_CLI             NUMBER(15)
    )
    TABLESPACE XDWAE09
    PCTUSED    40
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          10M
                NEXT             2M
                MINEXTENTS       1
                MAXEXTENTS       255
                PCTINCREASE      20
                FREELISTS        1
                FREELIST GROUPS  1
                BUFFER_POOL      DEFAULT
               )
    NOLOGGING 
    NOCACHE
    NOPARALLEL;
     
    CREATE INDEX ALM.IX_WDO_VTE_JOU_PVT ON ALM.TB_WDO_VTE
    (ID_WDO_VTE_MCI_JOU_HEU, ID_WDO_VTE_REF_CLA, ID_WDO_VTE_PVT)
    NOLOGGING
    TABLESPACE XDWAI06
    PCTFREE    20
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          5M
                NEXT             500K
                MINEXTENTS       1
                MAXEXTENTS       255
                PCTINCREASE      20
                FREELISTS        1
                FREELIST GROUPS  1
                BUFFER_POOL      DEFAULT
               )
    NOPARALLEL;
     
     
    CREATE INDEX ALM.IX_WDO_VTE_PVT_EMP_JOU ON ALM.TB_WDO_VTE
    (ID_WDO_VTE_PVT, ID_WDO_VTE_EMP, ID_WDO_VTE_MCI_JOU_HEU)
    NOLOGGING
    TABLESPACE XDWAI06
    PCTFREE    20
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
                INITIAL          5M
                NEXT             500K
                MINEXTENTS       1
                MAXEXTENTS       255
                PCTINCREASE      20
                FREELISTS        1
                FREELIST GROUPS  1
                BUFFER_POOL      DEFAULT
               )
    NOPARALLEL;


    3 > Lorsque je trace la session (avec toad) je ne vois rien, mais je ne sais pas voir non plus : l'explain plan semble bon témoigne que la requête select utilise tous les index. j'ai lancé une trace mais je ne suis pas super bilingue en tkprof, malgré l'aide des faqs et tutoriels trouvés ici bas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SMO] Script INSERT très lent
    Par Cyrilange dans le forum Accès aux données
    Réponses: 7
    Dernier message: 31/08/2010, 10h28
  2. Insertion trop lente
    Par esteban dans le forum Hibernate
    Réponses: 12
    Dernier message: 05/06/2008, 16h37
  3. export oracle 9.2.0.7 trés lent avec un user
    Par deadoralive dans le forum Outils
    Réponses: 2
    Dernier message: 10/10/2007, 18h11
  4. insertion dans une BD trop lente
    Par jouidos dans le forum Windows Forms
    Réponses: 13
    Dernier message: 01/02/2007, 12h32
  5. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo