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

DB2 Discussion :

Performance d'un update sur une colonne


Sujet :

DB2

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Performance d'un update sur une colonne
    Bonjour,

    Je souhaiterai faire un update sur une colonne dans un programme cobol db2 (v8). Partons sur une table avec une seule clé primaire et pas d’autre index, clés étrangère.

    Est-il préférable niveau performance de faire l’update sur la colonne en question (db2 se positionnera selon le prédicat sur la colonne et effectuera l’update) ou effectuer l’update sur toutes les colonnes de la table selon le prédicat ? ? ?

    J’aurai tendance à penser que l’update sur la colonne sera plus performant, mais on ne sait jamais avec db2…

    Un avis, merci d’avance ?

  2. #2
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Juin 2008
    Messages : 154
    Points : 225
    Points
    225
    Par défaut
    Bonsoir,

    Par définition, il est toujours préférable de limiter les accès. Donc, si tu n'as qu'une seule colonne à modifier, met à jour cette seule colonne, c'est la requête la plus performante que tu pourras faire.

    Quelques points qui peuvent couter cher en terme de perf, en cas d'update :
    - mettre à jour des colonnes d'index, cela signifie que l'index aussi est mis à jour, ce qui double les I/O.
    - mettre à jour une ligne dans une table compressée. Si la ligne modifiée tient plus de place que l'ancienne ligne, DB2 n'a pas la place de faire l'update au même endroit, il va donc décaler la ligne. Au mieux dans la même page, sinon dans une autre page. Résultat : la table se désorganise et peu prendre des extends pour rien. Dans ce cas, penser à faire des REORG périodiques.
    - attention également à la gestion des verrous qui peut couter très cher sur des updates, surtout avec une table en locksize row. Ne pas oublier l'ordre lock qui peut rendre de nombreux services : très dangereux (voire interdit) dans un programme officiel, mais sympathique en cas de reprise. Cela permet de mettre un verrou global et définitif sur la table, DB2 n'ayant alors plus qu'à faire les update et non plus à gérer des verrous. Bien évidemment, la table est totalement inaccessible jusqu'au prochain commit. Mais trop d'update sans commit provoque souvent un lock escalation, le résultat est alors le même si ce n'est qu'on a mis plus de temps !
    - ...

    Salut.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    merci pour ta réponse qui était ce que j'avais retenu de mes cours db2. Il va désormais falloir que je fasse admettre ça au projet qui nous a pondu du code pas très optimisé, sacré agl.

    bonne journée.

Discussions similaires

  1. [SQL] Update avec un count sur une colonne de la meme table
    Par debdev dans le forum SAS Base
    Réponses: 5
    Dernier message: 28/01/2014, 16h46
  2. update sur une colonne
    Par flash22 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 31/03/2011, 11h29
  3. update sur une colonne
    Par serna dans le forum Débuter
    Réponses: 2
    Dernier message: 30/12/2010, 11h05
  4. Réponses: 5
    Dernier message: 15/06/2007, 16h05
  5. Réponses: 4
    Dernier message: 31/10/2006, 19h03

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