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 :

Problème DB2 sur IBM/390


Sujet :

DB2

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Problème DB2 sur IBM/390
    Bonsoir à tous,

    Mon problème est assez vicieux si je puis dire... J'utilise une base de données DB2 dans laquelle, entre autres, il y a une table qui est sollicitée (très souvent) à chaque échange du CICS. C'est cette table, de service, qui pose problème lorsqu' un nombre important de transactions arrivent simultanément. Un -911 est généré, ce qui plante telle ou telle transaction. J'ai bien pensé utiliser la clause "WITH UR" dans le SELECT, mais j'ai un doute quant à la justesse de cette modification qui d'après moi peu engendrer des disfonctionnements dans la lecture des données.
    Quelqu'un peut-il m'indiquer s'il y a d'autres moyens "programme" ou "système" pour régler ce problème.

    Par avance merci.

    Fabrice

  2. #2
    Christianchristian
    Invité(e)
    Par défaut
    Bonjour,

    J'ai trouvé cela sur internet.

    In general a -911 means that a deadlock or timeout has occurred while the statement was attempting to obtain a lock on the object that is necessary for an insert to occur. That means that some other process has a lock on the object you need, and DB2 waiting for the lock to be released (wait time determined by a DB2 pram that can be set) and finally gave up waiting and terminated your transaction.

    It is possible that another process has a row lock on the table or index that your need, or the other process has a table lock (either taken explicitly or escalated by DB2 from a row lock). Try to find out what other locks are being held on that object.



    Je crois que la clause WITH UR ne peut être spécifiée que si la table est en READ ONLY.

    je viens de trouver ça également :

    WITH UR can be specified only if the result table is read-only.
    If isolation-clause is not
    specified, the default isolation is used with the exception of a default isolation level of uncommitted read. With uncommitted read, the default isolation level of the statement depends on whether the result table is read-only; if the result table is read-only then the default will be UR; if the result table is not read-only then the default will be CS.

    Je n'ai malheureusement pas de réponse précise à vous donner.
    Si ce n'est déjà fait, peut-être pouvez-vous mener une investigation sur les points suivants ?
    Quel genre de table est-ce, quelle est exactement son utilité ? Est-elle conséquente => mise en historique possible d'une partie des lignes ? A-t-elle (beaucooup) de clés secondaires ? Comment est-elle exploitée autrement que durant la session TP ?
    Les transactions CICS sont-elles (toutes) montées en pseudo-conversationnel ? Les msies à jours des fichiers et les ordres de "verrouillage et déverrouillage des entités" sont ils, au niveau du code, centralisés et judicieux (pertinents) ?

    Si ce n'est pas une table stratégique pour la gestion de l'entreprise, j'ai cru comprendre qu'elle sert de "logging" au TP, elle peut éventuellement être scindée en plusieurs tables (une table par application par exemple), lesquelles pourront toujours être consolidées pour créer une seule table en BATCH en fin de session téléprocessing. Mais cela n'est peut-être pas réaliste et entraînerait certainement des moodifications conséquentes.


    Cordialement,
    Dernière modification par Christianchristian ; 07/06/2006 à 16h29.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    Le -911 est un deadlock effectivement sur tes transactions. Les Locks se placant au niveau DB2, je ne vois pas vraiment de solution système pour résoudre ton problème. Peut etre au niveau des KIX mais je suis pas spécialiste du tout.

    La clause with UR peut être utilisé sur n'importe quelle type de table (également en RW), c'est le résultat renvoyé qui est RO. Tu ne pourras donc pas modifié le résultat de ta requête.

    Le WITH UR permet :
    1/ a n'importe quelle ligne de ta sélection d'être lue et/ou modifiée par une autre transaction pendant ta transaction contrairement aux niveaux d'isolation CS, RR, etc...

    2/Ta transaction peut lire n'importe quelle ligne même non commitée d'une autre transaction (dirty read)

    Je te conseille le lire la doc DB2 IBM sur l'article sur "isolation levels"
    http://publib.boulder.ibm.com/infoce...v2r2/index.jsp

    Peut etre comme le dit Christian regarder du côté de la structure de la table ou des transactions CICS.

  4. #4
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Si je comprend bien, tu ne fis jamauis que des ajouts dans ta table donc UR pourrais être une solution. Toutefois je ne vois pas comment il peut y avoir un problème de lock alors que jamais tu n'utilise le même record.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Points : 671
    Points
    671
    Par défaut
    par défaut, il me semble que les transactions KIX utilisent l'option CS pour leurs transactions interdisant l'acces sur les données utilisées aux autres pendant l'ensemble de la transaction...

    De plus, alors là , il faudrait que je regarde la doc mais les verrous ne se font pas forcément au niveau ligne mais peuvent être positionnés sur la page complète.

  6. #6
    Christianchristian
    Invité(e)
    Par défaut Correction
    Bonjour,

    Les mots suivants "If isolation-clause" ont "sauté" du texte de mon précédent message. Désolé, c'est pas moi c'est le copier/coller.


    Cordialement,

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Quel est l'ordre passé par tes transactions CICS ? Combien il y a t-il d'enregistrement dans ta table ?

    Une première solution est peut-être de passer en locksize row, sinon tu peux essayer en augmentant le pctfree.

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Déjà faudrait voir par un outil d'analyse de trace (DB2 PM par exemple) si c'est un DEADLOCK ou un TIMEOUT (c'est pas la même chose bien sûr !) et voir quels sont les processus (PLANS) et ressources (TABLES) en cause ...

    Le DIRTY READ (ISOLATION UR) est à manier avec prudence car si il peut résoudre un problème technique ponctuel précis, il peut engendrer de redoutables soucis fonctionnels (mise à jour incohérente, perte de mise à jour etc) ...

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Merci pour votre aide...
    Merci pour votre aide, mais je crois que le problème est plus complexe. Je vais préciser la problématique :
    Cette fameuse table qui pose problème fait partie d'une application qui a été mal conçue. En fait cette table sert à bloquer des accès sur des données en mise à jour à partie d'une clé. En théorie elle doit être vide car chaque transaction bloque une donnée en écrivant une ligne et en la supprimant en fin d'échange.
    Le problème se trouve à priori dans la multitude d'accès en un temps réduit.
    Est-ce un problème d'index ? faut-il revoir la déclaration de la table ?
    Cette table n'a pas d'index secondaire.

    Avez-vous d'autres idées ????

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par mousquetaires
    Merci pour votre aide, mais je crois que le problème est plus complexe. Je vais préciser la problématique :
    Cette fameuse table qui pose problème fait partie d'une application qui a été mal conçue. En fait cette table sert à bloquer des accès sur des données en mise à jour à partie d'une clé. En théorie elle doit être vide car chaque transaction bloque une donnée en écrivant une ligne et en la supprimant en fin d'échange ...
    Il y a une seule lignes pour toutes les transactions ? plusieurs ?

    A mon avis il serait plus judicieux de bloquer les transactions avec une lecture exclusive (SELECT ... FOR UPDATE OF) ou même une mise à jour (UPDATE) sur une ligne de même clé et ceci en tout début de transaction ...

    Comment peut-on bloquer en écrivant une ligne ? Je ne comprends pas ...

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Suite explication
    Chaque transaction, avant de mettre à jour les données d'une autre table va ecrire une ligne avec un identifiant correspondant à la donnée à mettre à jour. Cela se comporte comme avec un controle de time-stamp.

  12. #12
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par mousquetaires
    Chaque transaction, avant de mettre à jour les données d'une autre table va ecrire une ligne avec un identifiant correspondant à la donnée à mettre à jour. Cela se comporte comme avec un controle de time-stamp.
    C'est toujours pas très clair pour moi ...
    Qu'appelez-vous un contrôle de Timestamp ?

  13. #13
    Christianchristian
    Invité(e)
    Par défaut demande de précisions
    Bonsoir,

    Si j'ai bien compris cette table permet aux transactions CICS, de gérer les accès concurrents susceptibles de survenir sur une même entité fonctionnelle ?
    Par exemple : deux utilisateurs d'un service commercial se proposant par erreur de modifier au même moment l'en-tête d'une même commande. Si ce type de situation est mal gérée (ou pas gérée) c'est la dernière personne qui valide son travail qui mettra effectivement à jour l'entité "en-tête de commande".
    Vous mentionnez :
    "va ecrire une ligne avec un identifiant correspondant à la donnée à mettre à jour".
    hypothèse :
    Dans ce cas ce type de contrôle doit être effectué au niveau de la donnée, c'est-à-dire au niveau (applicatif) le plus bas.
    Ce qui revient à dire que, pour rester cohérente, une même transaction CICS de mise à jour va devoir insérer temporairement (le temps que dure l'intervention de l'utilisateur qui utilise la fonction applicative CICS) dans la table de service autant de lignes que de données à modifier. En fin d'intervention de l'utilisateur ces lignes sont supprimées de la table de service. J'ai entendu parler de quelque chose de semblable dans une banque, c'était "à la mode" par un moment ça s'imposait rarement !.
    Cela sous entend, en extrapolant ce scénario, qu'un grand nombre de lignes peuvent être insérées ou effaçées au même moment dans la table en question, par n transactions de mise à jour s'exécutant en "parallèle". Cela semble cadrer avec ce que vous mentionnez :
    "Le problème se trouve à priori dans la multitude d'accès en un temps réduit".
    De plus, la taille de la clef primaire doit être assez importante :
    - identifiant de l'entité fonctionnelle concernée par la mise à jour.
    - identifiant de la donnée concernée par la mise à jour.
    - .....................

    Si cette hypothèse est juste, je ne vois pas grand chose à faire d'autre que scinder la table et/ou retoucher les applications concernées.

    Cordialement,
    Dernière modification par Christianchristian ; 08/06/2006 à 16h38.

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Luc Orient
    C'est toujours pas très clair pour moi ...
    Qu'appelez-vous un contrôle de Timestamp ?

    Pour moi non plus, c'est toujours pas clair. Tu peux avoir plusieurs lignes simultanément dans ta table ?

  15. #15
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Citation Envoyé par Christianchristian
    Si cette hypothèse est juste, je ne vois pas grand chose à faire d'autre que scinder la table et/ou retoucher les applications concernées.

    Cordialement,
    Je le crains.

  16. #16
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Christianchristian
    Bonsoir,

    Si j'ai bien compris cette table permet aux transactions CICS, de gérer les accès concurrents susceptibles de survenir sur une même entité fonctionnelle ?
    Par exemple : deux utilisateurs d'un service commercial se proposant par erreur de modifier au même moment l'en-tête d'une même commande. Si ce type de situation est mal gérée (ou pas gérée) c'est la dernière personne qui valide son travail qui mettra effectivement à jour l'entité "en-tête de commande".
    ...
    C'est exactement ce que sait faire un SGBD digne de ce nom et en particulier DB2 for z/OS.

    Le problème risque de se compliquer si on veut gérer les mises à jour concurrentes entre l'affichage sur l'écran et le retour sur le serveur central ...

    Est-ce le cas ici ?

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci à vous tous pour votre aide...

    Après avoir testé le SELECT contenant le WITH UR, qui empêche d'avoir le fameux -911, nous allons supprimer purement et simplement cette table de service qui nous pose problème. Sa création a été une hérésie car elle ne sert à rien sinon qu'à poser des problèmes. Il est plus simple et plus sûr de garantir la l' la cohérence d'une mise à jour par le controle du time-stamp fournit par DB2.

    F.B

  18. #18
    Christianchristian
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Luc Orient
    .............. si on veut gérer les mises à jour concurrentes entre l'affichage sur l'écran et le retour sur le serveur central ...
    C'est préférable et recommandé, je pense,

    Cordialement,

  19. #19
    Christianchristian
    Invité(e)
    Par défaut demande de précision
    Bonsoir,

    Citation Envoyé par mousquetaires
    ........................ Il est plus simple et plus sûr de garantir la cohérence d'une mise à jour par le controle du time-stamp fournit par DB2.
    F.B
    Pouvez-vous préciser en quoi consiste le contrôle du time-stamp ? J'ai cherché sur internet et dans mes docs, je n'ai rien trouvé.

    Cordialement,

  20. #20
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Moi non plus je ne saisi pas ce dont tu parle par contrôle du timestamp ?

    La cohérence de tes données sera garantie si tu utilises des SELECT ... FOR UPDATE OF suivi d'un UPDATE.

Discussions similaires

  1. Problème d'erreur SQL avec une DB2 sur un AS400
    Par Baboulinet_ dans le forum Langage
    Réponses: 1
    Dernier message: 11/10/2011, 11h14
  2. Problème DB2 IBM's Optim
    Par a_karim_fr dans le forum DB2
    Réponses: 2
    Dernier message: 06/09/2011, 17h31
  3. [DB2 sur AS/400] Problème convention de nommage
    Par Sarawyn dans le forum DB2
    Réponses: 4
    Dernier message: 21/07/2010, 15h50
  4. Question sur IBM DB2
    Par SQLpro dans le forum DB2
    Réponses: 3
    Dernier message: 12/06/2007, 14h57
  5. Problème de config SAMBA/DB2 sur AIX
    Par ALHER dans le forum DB2
    Réponses: 1
    Dernier message: 23/08/2006, 15h54

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