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 :

Partitionnement d'une table volumineuse


Sujet :

Administration Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Septembre 2016
    Messages : 45
    Points : 53
    Points
    53
    Par défaut Partitionnement d'une table volumineuse
    Si je comprends bien le partionnement d'une table consiste en un découpage de celle ci en sorte de sous-tabe suivant en plusieurs façon. Dans mon cas le découpage se fera sur l'année d'une date de la table (2005, 2016 etc..)


    Je sais qu'il y a 3 type de partionnement mais je n'arrive pas à savoir à quoi correspond ce découpage.


    Ensuite je sais que pour requeter une table partitionée il faut désormais utiliser le mot clé " select * from ma_table partition("2015") pour l'année 2015 par exemple.

    Enfin et surtout comment ca se passe si je dois faire une requête sur l'ensemble des partitions d'une table ? Un simple "select * from ma-table" ca passe pas ? Je dois mentionner toute les partitions de cette table ?

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Septembre 2016
    Messages : 45
    Points : 53
    Points
    53
    Par défaut
    C'est jamais très agréable de se faire rediriger vers la doc quand on pose une question à priori simple et tres précise.. :/

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    C'est jamais très agréable de se faire rembarrer quand on prends le temps de répondre à une question.
    En outre, vu ta question, tu ne sembles absolument pas maîtriser les notions de partionnement donc ces liens te feront le plus grand bien.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Septembre 2016
    Messages : 45
    Points : 53
    Points
    53
    Par défaut
    Je ne t'ai pas du tout rembarrer. Je fais juste une remarque.
    Je n'ai pas du tout besoin d'en savoir plus sur le partitionnement que ce que je demande. Je suis pas DBA j'en ai juste besoin pour dev mes applis.

    En plus je trouve pas l'info que je cherche dans les liens.

    Merci quand même

  6. #6
    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
    Comme Ikebukuro le disait, quand on a besoin d'une info ça ne fait pas de mal de lire un peu de doc, DBA ou pas.
    Mais vos questions étant précises je vais y répondre.

    1. C'est le découpage par RANGE, avec des périodes d'un mois. Vous pouvez faire un découpage déclaratif en créant les partitions à l'avance ou par intervalles, Oracle se chargera de tout... à part des noms des partitions.

    2. select * from matable partition ... c'est une des façons. Si vous faites un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select *
      from matable
     where madatepartition >= date '2015-06-01'
       and madatepartition <  date '2015-08-01'
    Oracle va tout seul aller chercher dans la (ou les) partition correspondante.

    3. select * from matable ira lire toute les partitions.

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 393
    Points
    9 393
    Par défaut
    Quand tu décides de partitionner une table (par range , par liste, ou par hash) ...
    1. Ca te crée (éventuellement) des obligations nouvelles pour insérer des données. Il faut créer la partition de l'année X avant d'insérer des données pour cette année X.
    2. Si par hasard tu voulais dire : Update matable set année = 2015 where année = 2016 and id = xxxx , alors ça planterait . Donc, le partitionnement entraine des blocages au niveau de certains updates. En principe, ce point n'arrive quasiment jamais, mais je le signale.
    3. Toutes les requêtes de type SELECT que tu pouvais avoir vont continuer de fonctionner.
    Tu as la possibilité de préciser select * from matable partition (xxx) si tu le souhaites, mais ce n'est absolument pas une obligation. Parfois, sur certaines requêtes, ça améliore la performance de préciser le nom de la partition à utiliser. Il y a certaines tables que j'utilise régulièrement, en lecture, je ne sais même pas si elles sont partitionnées ou non !

    Si tu avais cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from matable where année = 2015
    tu peux la garder telle quelle, elle continuera de fonctionner, ou tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from matable partition (PAR_2015)
    .... et dans ce cas, pas la peine d'écrire where année = ...
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from matable partition (PAR_2015) where année = 2015
    Ces 3 requêtes vont renvoyer le même contenu. Avec a priori un temps d'exécution identique.

    Par contre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from matable partition (PAR_2015) where année = 2016
    Cette requête renverra 0 ligne.

    Pour choisir entre partition par LIST, par RANGE ou par HASH :
    - LIST est parfait quand tu as une liste fermée d'occurrences, qui évolue donc très peu (une partition par pays par exemple) ; tu as une action à faire ( créer une nouvelle partition) uniquement quand tu crées un nouveau pays.
    - RANGE est nécessaire quand tu as des valeurs 'continues'. Range permet de traiter des intervalles, alors que dans LIST, on n'a pas cette notion d'intervalle. RANGE est a priori le plus adapté pour des données chronologiques. Il faut créer une nouvelle partition tous les ans ( ou tu peux créer par anticipation une partition pour les 30 ans à venir si tu veux).
    - HASH permet de faire des partitions 'équilibrées', quand la clé de partition est pas ou peu prévisible. Si par exemple tu as des articles identifiés par leur code-barre, et que tu veux partitionner sur ce code-barre, une partition par HASH est parfaitement adaptée. Tu crées par exemple 16 partitions au moment de la création de ta table, et tu n'as plus à te préoccuper de la partie 'administration'.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2016
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Septembre 2016
    Messages : 45
    Points : 53
    Points
    53
    Par défaut
    Merci pour tes réponses.


    J'étais persuadé que les requêtes select devaient changer en ajoutant le mot clé "partition" à chaque fois.

    Il faut que je vois maintenant des exemples de requêtes insert into que des tables partitionné

  9. #9
    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
    Citation Envoyé par tbc92 Voir le message
    1. Ca te crée (éventuellement) des obligations nouvelles pour insérer des données. Il faut créer la partition de l'année X avant d'insérer des données pour cette année X.
    En 11g Oracle a introduit le partitionnement automatique par intervalles, plus besoin de créer les partitions à l'avance.
    Le seul problème c'est que les partitions s'appellent SYS_Pxxxx.
    Pas pratique pour faire un select * from matable partition ...Après ce n'est pas très compliqué de les renommer.

    Citation Envoyé par tbc92 Voir le message
    2. Si par hasard tu voulais dire : Update matable set année = 2015 where année = 2016 and id = xxxx , alors ça planterait . Donc, le partitionnement entraine des blocages au niveau de certains updates. En principe, ce point n'arrive quasiment jamais, mais je le signale.
    Avec la propriété de table ENABLE ROW MOVEMENT, c'est tout à fait possible.

  10. #10
    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
    Citation Envoyé par atlantx Voir le message
    Il faut que je vois maintenant des exemples de requêtes insert into que des tables partitionné
    Tant que vous avez votre valeur de partitionnement dans votre ordre d'insertion, Oracle saura où mettre la donnée.
    Vous n'avez rien de particulier à faire.

Discussions similaires

  1. Gérer une table volumineuse dans une seule forme
    Par lolo_momo dans le forum VB.NET
    Réponses: 5
    Dernier message: 03/07/2007, 11h55
  2. [9i] Migration d'une table volumineuse / performance
    Par Fiora dans le forum Administration
    Réponses: 21
    Dernier message: 23/04/2007, 11h42
  3. [Conception] Menu deroulant à partir d'une table volumineuse
    Par newbycool dans le forum Modélisation
    Réponses: 15
    Dernier message: 20/04/2007, 11h26
  4. lenteur lors de l'ouverture d'une table volumineuse
    Par gregcat dans le forum Bases de données
    Réponses: 18
    Dernier message: 19/04/2007, 08h25
  5. Réponses: 1
    Dernier message: 27/02/2007, 23h03

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