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

SQL Oracle Discussion :

Suppression en masse


Sujet :

SQL Oracle

  1. #1
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut Suppression en masse
    Bonsoir,
    nous travaillons sur un traitement d'import qui "doit" (c'est les clients qui exigent) se faire sur une base OLTP alors que ceux-ci continuent de travailler.
    La base en question contient en fait les données de plusieurs opérateurs qui utilisent les mêmes applicatifs mais leurs données sont cloisonnées (pas de partitionnement mais une clé permet d'identifier les données propres à chacun).
    Lorsqu'un opérateur lance un import de la base des contacts, nous sommes donc sensés faire du efface et remplace des données de celui-ci sans perturber les autres.
    Le problème que je rencontre c'est que mon delete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete from tab_contact where num_op=20;
    met une dizaine de minutes pour s'exécuter. Et du coup ce sont les 6 autres opérateurs qui en payent aussi les frais car plus personne ne peut travailler avec
    =>L'opérateur 20 (num_op=20) occupe effectivement 40% des enregistrements de la table.
    => La table tab_contact est indexée sur le champ num_op mais pour la requête précédente c'est un full scan qui est fait (probablement du au fait que 40% des données doivent être couvertes...) : peut-on forcer l'utilisation de l'index et y aurait il u intérêt ? Ou doit on plutôt désactiver les index pendant l'opération?
    => On a peur de passer par un CTAS alors que des utilisateurs utilisent les mêmes tables .

    Le nombre de lignes dans la table pour l'opérateur en question et de l'ordre de 100 000 lignes.

    Ma question est donc de savoir comment optimiser cette suppression en limitant la gène dans le travail des utilisateurs connectés (quitte à locker les tables quelques secondes si nécessaire). Des idées ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    Faites une trace étendue. Ça vous permettra d'enlever le mot probablement.
    Parce que un delete ça peut aussi devoir vérifier des clefs étrangères, etc...

  3. #3
    LEK
    LEK est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    715
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 715
    Points : 470
    Points
    470
    Par défaut
    Je vais verifier en effet.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    En faisant une suppression par lot.
    Vous supprimez 1000 lignes, vous committez, vous recommencez tant qu'il y a des lignes à supprimer.

    Attention, ces commit intermédiaire vont flinguer la transaction globale qui ne sera plus intégralement récupérable, il faudra passer par des reprises ou du flashback si vous voulez revenir en arrière.

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Waldar Voir le message
    En faisant une suppression par lot.
    Vous supprimez 1000 lignes, vous committez, vous recommencez tant qu'il y a des lignes à supprimer.
    Ca ne peut rien améliorer en termes de performance au contraire!
    Est-ce que un merge c'est envisageable ? Mais avant tout tracez pour avoir les détails d'où le temps passe.

Discussions similaires

  1. Suppression de masse sans curseur
    Par calagan99 dans le forum Développement
    Réponses: 2
    Dernier message: 14/06/2011, 11h59
  2. Suppression en masse
    Par petitfrere dans le forum Administration
    Réponses: 7
    Dernier message: 08/09/2009, 10h44
  3. Suppression de masse
    Par Macfurp dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/10/2008, 15h16
  4. Suppression de masse
    Par boutss dans le forum Oracle
    Réponses: 9
    Dernier message: 03/12/2007, 18h54

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