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 :

Update trés lent sur une grosse table


Sujet :

Oracle

  1. #1
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut Update trés lent sur une grosse table
    Bonjours,

    Je suis actuellement sur oracle 8i.

    J'ai une table de 38 champs dont 8 sont indéxés.

    La table contient aproximativement 2 000 000 enregistrements.

    Je fais un update de tous les champs d'un rows que je sélectionne par son identifiant unique (qui est indexé).

    L'update d'un rows prend entre 9 et 12 secondes sur un serveur dédié à oracle :
    Xeon 3,2 Ghz
    1 Go de RAM
    windows 2003 server

    Le temps d'update est énorme et inacceptable. Quelles pistes pour améliorer les temps d'update ?

    -ne pas updater systèmatiquement les 38 champs de la rows ?
    -enlever quelques indexes ? (8 c'est peut-être un peu beaucoup sur une table aussi grosse)
    -mettre en place un système d'archivage de cette grosse table ?
    -revoir ma configuration du serveur oracle car je dois pouvoir avoir de meilleures performances sur un tel cas de figure.

    j'attends vos remarques


  2. #2
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    l'insertion de 150 rows dans la même table est quasi instantanné

    même pas le temps de regarder le temps d'éxécution des requetes d'insertion...

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Ta table est peut-être bien fragmentée :

    Tu as la tête de l'update et son plan d'exécution ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  4. #4
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Ta table a-t-elle des tables la référençant ?
    Sinon, la PK fait combien de colonnes ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  5. #5
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    update classique
    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
    UPDATE tache
        SET clntache = :b1, 
            figtache = :b2, 
            filtretch = :b3, 
            libtache = :b4, 
            datemintch = :b5, 
            datemaxtch = :b6, 
            niveautch = :b7, 
            typecollectetch = :b8, 
            coteconduitetch = :b9, 
            colortch = :b10, 
            activitetch = :b11, 
            modeparcourstch = :b12, 
            segmentationtch = :b13, 
            numordretch = :b14, 
            longueurtch = :b15, 
            senstronctch = :b16, 
            clenoeud1 = :b17, 
            clenoeud2 = :b18, 
            cleaccesreseau1 = :b19, 
            cleaccesreseau2 = :b20, 
            clezone = :b21, 
            cleservice = :b22, 
            clevehicule = :b23, 
            cletronc = :b24, 
            clefrequence = :b25, 
            cletachemere = :b26, 
            codetch = :b27, 
            noscenariotch = :b28, 
            typeflag = :b29, 
            marchearrieretch = :b30, 
            bdrtronc = :b31, 
            observation = :b32, 
            hlpintertch = :b33, 
            nomchauftch = :b34, 
            planntch = :b35, 
            typeincidenttch = :b36, 
            libincidenttch = :b37, 
            ostch = :b38
        WHERE cletache = :b39
    (requête oci paramétré)

    Il y a un index sur cletache.

    Je vais chercher de la doc sur la fragmentation


  6. #6
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    Citation Envoyé par McM
    Ta table a-t-elle des tables la référençant ?
    non

    Sinon, la PK fait combien de colonnes ?
    1 colonne



  7. #7
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Difficile d'investiguer sans
    1) L'explain plan
    2) La liste exhaustive des indexes.

    Pour obtenir 1), re-execute l'update sous sqlplus apres un ordre autotrace on
    Pour 2), dump le contenu de USER_IND_COLUMNS pour la table en question

  8. #8
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    j'ai supprimé l'index sur ma cle primaire et je l'ai recréé... ben maintenant les updates sont instantannés.

    ... résolut mais je sais pas ce qu'il s'est passé :s


    à ceux qui m'ont aidé à chercher

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    J'arrive à la bourre mais dans ca cas la il faut l'explain plan ( il ne devait pas passer par l'index ) et surtout les évenements d'attentes

    Joauad

  10. #10
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    1) Jaouad, pourquoi ne devrait-il pas prendre l'index ?
    2) La recréation de l'index a dû le défragmenter... ça m'a l'air logique comme explication, non ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  11. #11
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Si les stats ne sont pas calculées, que l'index a subit de fortes modifications (profondeur trop importantes), des stats obsolètes, ... sont autant de raisons qui peuvent expliquer la non-utilisation de l'index !

  12. #12
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ce qui relance le débat sur la méthode et la fréquence de raffraîchissement des stats...
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  13. #13
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Quel débat ? il n'y a pas à débattre, c'est une obligation de le faire régulièrement (en tout cas, avant la 10g) ! ;-)

  14. #14
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par LeoAnderson
    Quel débat ? il n'y a pas à débattre, c'est une obligation de le faire régulièrement (en tout cas, avant la 10g) ! ;-)
    Mais quand ? comment ? est-ce automatisable ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  15. #15
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Ah oui, évidemment.... c'est uniquement sur le comment que l'on peut débattre, pas sur le pourquoi ! ;-)

  16. #16
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par fadace
    1) Jaouad, pourquoi ne devrait-il pas prendre l'index ?
    Voir la réponse qu'a donnée notre cher léo .Autre cas qui n'a rien a avoir ici c'est le clustering factor.

    Calcul des stats :
    Une solution que nous avons mis en place ici est la suivante ( elle présente des avantanges et des inconvénients )

    Le principe est le suivant , tu ne me calcul les stats que pour les index et les tables que lorsque la volumétrie à bougé de 10 %. Permettant ainsi de calculer seulement ce qui est nécessaire. Ce calcul est quotidien ( les bases font l'objet de bcp d'activité ) puis tout les semaines il y a une validation ( validate strucure ) des index/Tables si l'index n'est plus en phase avec la table , il y a un rebuild et aprés un calcul des indess.

    Il faut également pour les index utiliser trés fréquemment , construire des histogrammes .

    Voila ce n'est qu'une proposition parmit d'autres

  17. #17
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Pour ne pas avoir à compter le pourcentage qui bouge, il suffit de passer les tables en "MONITORING" et ensuite, de faire un premier calcul des stats.

    ensuite, le package DBMS_STAT te permet de lister les objets pour lesquels les stats sont "STALE" (obsolètes); il suffit alors de ne recalculer que ces stats là ! :-)

  18. #18
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par LeoAnderson
    Pour ne pas avoir à compter le pourcentage qui bouge, il suffit de passer les tables en "MONITORING" et ensuite, de faire un premier calcul des stats.

    ensuite, le package DBMS_STAT te permet de lister les objets pour lesquels les stats sont "STALE" (obsolètes); il suffit alors de ne recalculer que ces stats là ! :-)
    Oui effectivement c'est cela dont je parlais , je ne me paluche pas à la main les 20 000 index de mes ERP ( c'est vrai que j'ai opublié de le dire )

  19. #19
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Citation Envoyé par Jaouad
    Citation Envoyé par LeoAnderson
    Pour ne pas avoir à compter le pourcentage qui bouge, il suffit de passer les tables en "MONITORING" et ensuite, de faire un premier calcul des stats.

    ensuite, le package DBMS_STAT te permet de lister les objets pour lesquels les stats sont "STALE" (obsolètes); il suffit alors de ne recalculer que ces stats là ! :-)
    Oui effectivement c'est cela dont je parlais , je ne me paluche pas à la main les 20 000 index de mes ERP ( c'est vrai que j'ai opublié de le dire )
    Je m'en doutais bien, mais je craignais que certains ne commencent à imaginer un trigger sur insert/update/delete afin de déterminer le pourcentage de mouvements... ;-)

  20. #20
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Le MONITORING n'est pas coûteux si on le fait sur toutes les tables ?
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Optimisation d'une requête SELECT sur une grosse table
    Par eracius dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/05/2008, 14h51
  2. Suppression de doublons sur une grosse table
    Par CaptainT dans le forum SQL
    Réponses: 20
    Dernier message: 24/05/2008, 09h25
  3. Création d'un index sur une grosse table
    Par Jester dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 02/04/2008, 12h44
  4. Requête lente sur une grosse table
    Par mr_keyser dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 12/12/2007, 19h15
  5. Quellue interface pour travailler sur une grosse table ?
    Par grinder59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/12/2006, 16h25

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