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 :

[Oracle9i] Delete très long


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Points : 32
    Points
    32
    Par défaut [Oracle9i] Delete très long
    Bonjour,
    Cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM PROJ WHERE ISCEN=1268;
    met presque 5 minutes à s'executer, sachant que la table PROJ contient au départ environ 106000 enregistrements, et que cette requête en supprime 1000. Le champ ISCEN n'entre pas dans la définition d'une clé étrangère, peut être NULL, et est indexé.
    La table PROJ contient une trentaine de champs, de type NUMBER, VARCHAR2, DATE ou CHAR.

    Les requêtes passées avant l'appel de celle-ci s'effectuent toutes dans des temps normaux, et si je fais un UPDATE de cette table avec la même clause, il s'effectue en à peine une seconde.

    Auriez vous une idée de la provenance de cette lenteur ?

    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    est-ce que cette table (et pas juste le champ) est référencée par d'autres clef étrangère avec des "delete cascade" ?
    auquel cas les suppression vont devoir se faire en cascade pour toutes les lignes référencées par les lignes que tu supprimes de la table mère

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Points : 32
    Points
    32
    Par défaut
    Oui, elle est elle-même référencée, mais justement, les requêtes précédant ce DELETE portent justement sur la suppression des enregistrements des autres tables où elle est référencée dans les clés étrangères.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    est-ce qu'il y a un trigger ? Tu es en AUM (UNDO) ? Quelles stats tu as dans v$sesison_wait pendant la supression ?

  5. #5
    Membre éprouvé Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Points : 931
    Points
    931
    Par défaut
    si tu n'es pas dans un environnement de prod, essaye de désactiver ces clef étrangères...

    même si tu delete les lignes filles d'abord, Oracle va peut-être quand même faire le contrôle sur les lignes restantes des tables filles.

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Bonjour,

    Une autre possibilité:
    As-tu beaucoup d'indexes sur ta table ou tu fais ton delete?
    Cela peut le ralentir énormement..

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    est-ce qu'elle est partitionnée ?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Points : 32
    Points
    32
    Par défaut
    Yorglaa >> Effectivement en désactivant les FK, la suppression se passe beaucoup plus rapidement, dans des temps de l'ordre de la seconde.

    Aline >> Une quinzaine d'indexes, ça fait beaucoup ?

    je vais chercher du côté des FK, si je peux faire quelque chose...

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    15 indexes ça commence à faire trop en effet

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par MoitieDeCigare
    Yorglaa >> Effectivement en désactivant les FK, la suppression se passe beaucoup plus rapidement, dans des temps de l'ordre de la seconde.
    As tu indexé tes fk?
    Sinon, tu te tape des tables access full sur tes tables qui référencent ta table principale à chaque delete.

    Citation Envoyé par MoitieDeCigare

    Aline >> Une quinzaine d'indexes, ça fait beaucoup ?

    .
    oui et cela impacte surement pas mal, mais peut être que le problème principal se trouve au niveau des fk

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    A partir d'une certaine échelle de base (très très grosse), il est conseillé de ne pas mettre de clef étrangère du tout. On considère qu'en régime de croisière, l'applicatif à été suffisament testé et validé et n'a pas à sous-traiter à la base les controles d'intégrité référentielles...

  12. #12
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par remi4444
    A partir d'une certaine échelle de base (très très grosse), il est conseillé de ne pas mettre de clef étrangère du tout. On considère qu'en régime de croisière, l'applicatif à été suffisament testé et validé et n'a pas à sous-traiter à la base les controles d'intégrité référentielles...

    Bonjour Remi,
    Qui c'est ce on?
    Pour rappel, les clés étrangères sont très importantes pour les problème d'intégrité de données mais pas seulement! Même si u es sur de toi, les clés étrangères ont une autre utilité: l'optimisation de requête.
    en effet, Pour Oracle, c'est un peut la traduction d'une logique fonctionnelle.
    Perso, je n'ai jamais entendu cela et suis totalement contre cette affirmation.
    mais cela n'engage que moi et cela sort du cadre de ce post!

    amicalement!

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    "on" ce sont ces messieux de chez oracle... je suis déja intervenu sur une base de plusieurs teras avec une activité monstrueuse, qui avait été conçue en coordination avec oracle, ça m'avait surpris aussi au début cette absence de FK. Mais avec une telle dimension, les petites vérifications occasionnées par chaque controle l'intégrité étaient autant d'évenement consomateurs. Et plus les tables sont grosse, plus c'est consomateur. Pour information, je travaille en ce moment sur une base sybase de 8 Téras faisant partie d'un gros progiciel de facturation téléphonique, et il n'y a pas là non plus l'ombre d'une clef étrangère.

    Le sujet de ce post en est la parfaite illustration d'ailleurs. Si on est obligé de créer des index juste pour que ces controles ne rament pas trop, avoue que c'est un peu génant. Mettre des clef étrangères pour une petite application où on a pas envie de blinder par de la bonne programmation la cohérence des données, c'est normal, on délèque à la base cette partie fonctionnelle. Mais ce faisant, on lui fait faire tout un tas de travail inutile. A petite échelle, c'est clair que ce n'est pas pénalisant par rapport au gain en sécurité et à l'économie de developpement que ça apporte. Mais j'ai déja vu une base ou le simple passage de stats sur les index se planifiait sur 12 jours! et là crois moi qu'on fait la chasse aux gaspi

    Quant à l'optimisation, je ne crois vraiment pas que ça joue le moins du monde. Si on veux optimiser les jointures, il faut mettre des index ou faire carément des clusters, mais je vois pas en quoi les clef étrangères jouent un role, cepenant si tu as des sources à ce sujet ça m'interresse....

    Sinon, je pense qu'on peut trouver un juste milieu. Dans une base, il y a bien souvent une foule de petites tables et seulement quelques tables très très grosse. Le bon compromis est de laisser FK partout mais de desactiver celles en rapport avec ces quelques tables "hors normes"

  14. #14
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Citation Envoyé par aline
    les clés étrangères ont une autre utilité: l'optimisation de requête.
    Tu nous avais déjà parlé de ça dans un autre post effectivement, mais je t'avoue que je n'ai jamais pu le constater par moi même (même si je te fais confiance). Cependant dans le cas de TRES GROSSES bases comme celles dont parle Rémi, j'imagine que les requêtes sont plus ou moins figées (seuls les variables changent) et leur plan d'exécution aussi.

    Dans ce cas, est-ce que les fk jouent vraiment un rôle d'optimisation, ou est-ce qu'elles ne sont utiles qu'à l'établissement du plan d'exécution ?

  15. #15
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par nuke_y
    Dans ce cas, est-ce que les fk jouent vraiment un rôle d'optimisation, ou est-ce qu'elles ne sont utiles qu'à l'établissement du plan d'exécution ?
    ça voudrait dire un peu la même chose
    Je peux me tromper, mais je ne crois ni à l'un ni à l'autre. On pourrait imaginer une influence dans l'optimisation si les rowid de la table de référence était sauvegardés dans les même blocks que les valeurs de colonnes FK des autres tables pointant sur la première, mais je n'ai jamais entendu parlé de choses pareilles chez oracle.

    Lorsqu'on regarde la doc oracle de tunning, on ne voit pas non plus mentionné les FK...

    http://download-uk.oracle.com/docs/c...33/index.htm#F
    Donc si quelqu'un a des sources montrant que les FK ont une influence positive sur l'optim, je suis preneur...

  16. #16
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Ce que je voulais dire c'est que soit les FK jouent un rôle d'optimisation SEULEMENT à l'établissement du plan d'exécution, soit elles jouent un autre rôle d'optimisation, et dans ce cas lequel ?

    Si elles jouent un rôle SEULEMENT à l'établissement du plan d'exécution, elles ne serviront à rien si les requêtes et leurs plans d'exécutions sont figés (grosse applis).

Discussions similaires

  1. [10gR1] Delete très long (+ de 20 heures)
    Par marc85 dans le forum Administration
    Réponses: 12
    Dernier message: 23/07/2013, 19h34
  2. Changement de PK => Delete très long
    Par beubeu40 dans le forum SQL
    Réponses: 11
    Dernier message: 10/02/2010, 17h37
  3. DELETE très long sur grosse table partitionée
    Par glutock dans le forum SQL
    Réponses: 3
    Dernier message: 28/04/2008, 10h47
  4. delete très long
    Par slefevre01 dans le forum Oracle
    Réponses: 7
    Dernier message: 06/10/2005, 13h16
  5. Très long texte dans Quick Report - Comment faire ?
    Par delphi+ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/08/2005, 22h18

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