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

PL/SQL Oracle Discussion :

WHERE mieux qu'une partition ?


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut WHERE mieux qu'une partition ?
    Bonjour à tous,

    J'ai un problème sur lequel j'aimerai votre avis.

    Je travaille sur une table qui possède environ 3 millions d'enregistrements. Rien de méchant dans les données : des dates, varchar2, number...

    Mon traitement PL/SQL pour l'instant charge dans un cursor l'intégralité de la table suivant la requête typée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT champ1, champ2, champ3 
    FROM matable 
    WHERE champs1 BETWEEN date1 AND date2
    AND champ2 <> 'valeur text'
    ORDER BY champ1
    Ce code fonctionne parfaitement je n'ai aucune erreur.
    Mon champ2 possède uniquement la contrainte unique, et ma restriction porte toujours sur la même valeur.

    Aussi me suis je dit, je vais créer une partition sur ma table afin de directement taper dedans, et ne plus utiliser mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND champ2 <> 'valeur text'
    Aussi ai-je transformé la requête ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT champ1, champ2, champ3 
    FROM matable PARTITION (mapartition)
    WHERE champs1 BETWEEN date1 AND date2
    ORDER BY champ1
    Et là vient mon problème il me sort l'erreur durant l'exécution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERROR at line 1:
    ORA-04030: out of process memory
    when trying to allocate 16408 bytes (koh-kghu sessi,pmuccst: adt/record)
    Pourquoi me prend t il plus de mémoire alors qu'il n'a plus, enfin je crois, le parcours de la table à effectuer ....?

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est peut-être pas lié à la partition mais juste la volumétrie qui a un peu augmenté et la PGA avec. T'as pas retaillé PGA_AGGREGATE_TARGET ou autre au passage ? T'as de la mémoire de libre sur ton serveur ?

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut
    La volumétrie est stable sur mon schéma, puisque ce sont des schémas tampon qui stock mes données de la journée de prod de la veille pour traitement.

    Dans le problème tel que je l'ai, les données sont exactement les mêmes, et le serveur m'est tout entier dédié.

    Second problème c'est que je ne suis pas admin de la base ni du serveur, , aussi je ne peux pas interroger les vues système de ma base, ni aller voir le fichier d'init...

    Voilà pourquoi je me tourne vers ceux qui ont l'expérience, étant aveugle sur mon serveur.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    et les admins ne peuvent pas vérifier le problème ? Si ça se trouve c'est le DBA qui a modifié des paramètres.

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 4
    Par défaut
    Tu as raison se sera sûrement plus simple.

    Cependant, "théoriquement", tu en penses quoi ?

    Merci pour tes réponses.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 207
    Par défaut
    Bonjour,

    En théorie, lorsque ta table est partitionnée, il n'est pas nécessaire de préciser à ORACLE sur quelle partition il faut taper, il va utiliser la clause where pour effectuer le choix des partitions à parcourir.

    Après il ne faut pas perdre de vue l'intérêt des partitions:
    - Performance (mais pas toujours)
    - Administration (rebuild partition par partition, emplacement sur axe différents,...)
    Laurent

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Théoriquement je n'ai aucune explication si ce n'est un plan d'exécution complétement foireux qui imposerait un tri beaucoup trop gros.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Par défaut
    Citation Envoyé par lallio Voir le message
    il va utiliser la clause where pour effectuer le choix des partitions à parcourir.
    Je ne connais pas les partitions, mais d'après ce que tu dis il faut donc conserver la clause where alors que Arakil l'a justement supprimée ; peut-être que c'est simplement que du coup ce where n'est jamais pris en compte et le nombre d'enregistrements explose donc en conséquence?

    Ou est-ce que la syntaxe en faisant FROM PARTITION est aussi correcte, et devrait aboutir au même résultat?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une partition pour une table
    Par Erakis dans le forum SQL Procédural
    Réponses: 22
    Dernier message: 28/02/2005, 18h39
  2. [Windows 2003 Server] Redimention d'une partition Win 2003
    Par Arbisis dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 22/02/2005, 22h56
  3. Mount / fstab - Problème de droit sur une partition
    Par Chance666 dans le forum Administration système
    Réponses: 5
    Dernier message: 17/01/2005, 15h57
  4. Réponses: 6
    Dernier message: 24/09/2004, 13h10
  5. Accéder à une partition HPFS
    Par Krashtest dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 14/11/2003, 10h16

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