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

Administration Oracle Discussion :

deadlock des tables mortels


Sujet :

Administration Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 137
    Points : 59
    Points
    59
    Par défaut deadlock des tables mortels
    Bonjour,

    on a un batch qui tourne le jour et qui locke des tables par des updates de masse et entre temps il ya des users qui sollicitent ces mêmes tables==> des deadlocks.
    et c'est trop pénalisant, j'ai entendu parler d'une solution de table temporaire mais je ne sais plus comment ca se passe, pourriez vous m'expliquer cette solution ou auriez-vous svp d'autres pour eviter ce conflit ? ou s'il ya une doc soit la bienvenu

    Merci d'avance de votre aide.

  2. #2
    Membre averti Avatar de Wurlitzer
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 469
    Points : 408
    Points
    408
    Par défaut
    Je ne sais pas de quoi tu parles avec ton histoire de table temporaire mais avant de partir vers du compliqué essaye de vérifier 2 ou 3 choses simples.

    As tu été voir le fichier trc dans udump qui te donne l'ordre qui plante ? Cela peut aider a trouver le problème de logique et remettre les choses dans l'ordre. En particulier vérifier que si tu mets a jour plusieurs tables, les mises a jour sont faite dans le même ordre.

    As tu vérifié que toutes les Foreign Key de tes tables sont indexé ? (Sinon ce la provoque des lock de niveau table qui ont vite fait de dégénérer en Deadlock)

  3. #3
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Est-ce que les batchs ne peuvent vraiment pas etre programmés a un autre moment ? Voir aussi la frequence des Commit du batch, peut-etre qu'elle peut etre abaissee.

    En ce qui concerne les tables temporaires, nous avons une solution de ce genre,sur des batchs qui ne font que de l'insert.
    Les inserts sont fait dans une table temporaire (session table) puis ,a la fin du batch, elles sont basculées vers la table permanente (cela diminue en fait le temps de blocage de la table permanente, et le risque de lock). Mais si le batch fait des updates, cela ne marchera pas

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 137
    Points : 59
    Points
    59
    Par défaut
    Bonjour,
    Je vous remercie tous les deux, la solution de isa06 m’interesse beaucoup, par contre quand tu bascules le tout dans la table permanente par quelle méthode ( insert into suivi de select * ) ou par d’autres moyens outils...... , pourrais-tu stp me donner les codes pour savoir bien comment ca marche ?

    Merci pour ton aide.

  5. #5
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Désolée de ne pas etre revenue plus tot sur ce post, mais j'ai eu pas mal de travail...
    Voila des infos sur les tables temporaires, mais je pense qu'il faut d'abord regarder si vous ne pouvez pas améliorer votre batch selon les indications données plus haut.


    La table temporaire est créée par un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE GLOBAL TEMPORARY TABLE <Ttable> (<columns>)
      ON COMMIT DELETE ROWS   ;
    et a l'insert on fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into <PTable> select /*+ APPEND */  from <Ttable>;
    commit;
    - Ptable est le nom de la table "permanente"
    - Le /*+ APPEND */ est un hint qui permet de faire un direct-path insert en bout de table (pas de recherche d'espace libre dans les pages, c'est plus rapide)
    - Le commit termine la transaction d'insert et vide la table temporaire. On peut recommencer avec d'autres lignes.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    APPEND sur une table temporaire c'est complétement inutile puisque l'avantage d'une table temporaire c'est justement de ne pas stocker les données

  7. #7
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2004
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2004
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Le APPEND ne se fait pas sur la table temporaire, mais sur la table permanente dans laquelle on copie les données de la table temporaire....

    Donc je clarifie mon explication

    La table temporaire est créée par un


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE GLOBAL TEMPORARY TABLE <Ttable> (<columns>)
      ON COMMIT DELETE ROWS   ;
    on insere normalement dans Ttable,
    et a la fin , pour recopier les données dans la table "principale" on fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into <PTable> select /*+ APPEND */  from <Ttable>;
    commit;

    Ca m'apprendra a écrire trop vite

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 137
    Points : 59
    Points
    59
    Par défaut
    Je vous remercie pour vos explications precieuses,

    Grand Merci à vous tous

Discussions similaires

  1. remplir des tables a partir de fichiers TXT
    Par jeremie dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/03/2004, 14h50
  2. [Volume des tables et performance]
    Par kase74 dans le forum InterBase
    Réponses: 9
    Dernier message: 09/03/2004, 14h14
  3. Afficher noms des tables d'une base
    Par jeff37 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/01/2004, 16h00
  4. Liste des tables d'une bases de données spécifique
    Par faridos23 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2003, 22h20
  5. noms des tables d'une base
    Par molto dans le forum SQL
    Réponses: 2
    Dernier message: 17/03/2003, 22h14

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