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 :

Théorie du partitionnement


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut Théorie du partitionnement
    Bonjour,

    Je travaille sur une table contenant plusieurs millions d'enregistrements.
    Chaque année, elle grossit d'autres millions de lignes.
    Le traitement s'effectue toujours sur une année donnée, donc une partie de la table. Le partionnement de cette table sur la colonne annee (number) semble approprié.
    Le simple fait de créer les différentes partitions est-il suffisant, ou faut-il également agir sur l'indexation. Aujourd'hui, seule un PK est définie sur cette table. J'ajoute, pour finir, qu'il est hors de question de modifier les requêtes existantes qui agissent sur cette table.
    D'avance merci.

  2. #2
    Expert confirmé 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
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Bonjour,

    Je travaille sur une table contenant plusieurs millions d'enregistrements.
    Chaque année, elle grossit d'autres millions de lignes.
    Le traitement s'effectue toujours sur une année donnée, donc une partie de la table. Le partionnement de cette table sur la colonne annee (number) semble approprié.
    Le simple fait de créer les différentes partitions est-il suffisant, ou faut-il également agir sur l'indexation. Aujourd'hui, seule un PK est définie sur cette table. J'ajoute, pour finir, qu'il est hors de question de modifier les requêtes existantes qui agissent sur cette table.
    D'avance merci.
    Les requêtes qui utilisent la clé primaire n'ont pas besoin de partitionement.
    Les requêtes qui font full table scan vont automatiquement béneficier de la partition.
    Mais il faut voir la tête des requêtes pour parler index.
    Il y a un chapitre (3) du Effective Oracle By Design du Tom Kyte disponible en télechargement sur sont site qui parle du partitionement.
    Il semble que le but du partitionement dans ton cas c'est la performance, est-ce vrai ?

  3. #3
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    Tu peux aussi créer des partitions sur tes index, sachant que ce ne sera pas l'idéal pour la PK, puisque tu devras le déclarer en global sur la table, ce qui est moins pratique de d'avoir une partition locale, où on a correspondance parfaite entre partition de table et partition d'index.

    On peut ruser pour contourner cela en mettant l'année dans la PK, mais c'est bricoler...

    Ca dépend aussi si tes traitements se servent beaucoup de la PK, si ce n'est pas le cas, partitionner les tables suffit à réduire les temps de traitement.

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    oui, les traitements n'utilisent que la PK.

  5. #5
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    Dans ce cas, on peut préfixer la PK par l'année, on pourra alors construire un index partitionné en local sur la table partitionnée, ce qui veut dire qu'on est sûr dans ce cas de n'utiliser qu'une partition de table et la partition correspondante de l'index.

  6. #6
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Dans notre cas, l'année est en 2ème position dans la PK et je ne suis pas certain que la passer en première position n'ait auncune incidence sur les requêtes existantes.

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Voici le plan sur la table partitionnée avec sa PK sans index particulier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    SQL> SELECT * FROM XXXX WHERE annee = 2008 and ROWNUM < 100
      2  /
    99 ligne(s) sélectionnée(s).
     
    Plan d'exécution
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=2 Card=99 Bytes=52
              47)
       1    0   COUNT (STOPKEY)
       2    1     PARTITION RANGE (SINGLE) (Cost=2 Card=101 Bytes=5353)
       3    2       TABLE ACCESS (FULL) OF 'XXXX' (TABLE) (Cost=2 Card=1
              01 Bytes=5353)
    Il semblerait que la bonne partition sélectionée.

  8. #8
    Expert confirmé 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
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    oui, les traitements n'utilisent que la PK.
    Donc partitionner ne servira pas à grand chose.
    Mais, est ce que t'as un exemple (table, pk, requête)?
    Et c'est quoi le problème ?

  9. #9
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Donc partitionner ne servira pas à grand chose.
    Mais, est ce que t'as un exemple (table, pk, requête)?
    Et c'est quoi le problème ?
    Il n'a pas de problème a proprement parler. Je cherche des solutions d'optimisation s'il y en a. cette table fait 70 millions de lignes et il me semblait que le partitionnement était justement fait pour améliorer les temps de traitement des requêtes.

  10. #10
    Expert confirmé 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
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Il n'a pas de problème a proprement parler. Je cherche des solutions d'optimisation s'il y en a. cette table fait 70 millions de lignes et il me semblait que le partitionnement était justement fait pour améliorer les temps de traitement des requêtes.
    Je dirait plutôt d'améliorer les temps de traitement des certaines requêtes.

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

Discussions similaires

  1. Pb de truncate sur table partitionnée
    Par Mateo dans le forum Oracle
    Réponses: 14
    Dernier message: 29/11/2004, 09h58
  2. Partitionnement sous Redhat
    Par thomas_strass dans le forum Administration système
    Réponses: 4
    Dernier message: 15/09/2004, 17h07
  3. Partitionner des tables existantes
    Par zestrellita dans le forum Administration
    Réponses: 13
    Dernier message: 29/04/2004, 16h49
  4. Partitionner avec fdisk
    Par saibe dans le forum Administration système
    Réponses: 4
    Dernier message: 13/08/2003, 10h01

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