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 :

100 million de lignes, 34 Go : partition ou autre ?


Sujet :

Administration Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut 100 million de lignes, 34 Go : partition ou autre ?
    Voilà mon problème : j'ai quelques tables qui concentrent la majorité des données et qui sont la cible de la majorité des requêtes.
    Je suis sous Oracle 9.2.
    Je me demandais ce qui serait le plus intéressant à faire :
    partitionner les tables,
    partitionner les indexes de tables,
    autre chose ?

    Table 1 : 100 M de lignes 34 Go 4 indexes, 1 unique
    Table 2 : 39 M de lignes 15 Go 7 indexes, 1 unique
    Table 3 : 14 M de lignes 5 Go 11 indexes, 1 unique
    Table 4 : 12 M de lignes 2 Go 1 indexe unique
    Table 5 : 10 M de lignes 1 Go 3 indexes, 1 unique

    Et surtout je me demandais comment faire !

    D'avance merci,
    Greg

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    11 et 7 indexes c'est beaucoup.

    A part ça :

    Y a-t-il des problèmes de perf ?
    En écriture, lecture ou les deux ?
    Sur toutes les tables ?
    Toutes les données sont utiles ou seulement les plus récentes ?
    Quel critère de partitionnement envisages-tu ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Fred_D
    11 et 7 indexes c'est beaucoup.
    Je suis bien d'accord. Mais je n'ai pas le "cut", je peux simplement faire des propositions... argumentées

    Citation Envoyé par Fred_D
    Y a-t-il des problèmes de perf ?
    En écriture, lecture ou les deux ?
    Sur toutes les tables ?
    Toutes les données sont utiles ou seulement les plus récentes ?
    Quel critère de partitionnement envisages-tu ?
    Oui il y a de gros problèmes de perf en lecture. (En écriture je ne sais pas vraiment comment ça se passe.)
    Sur au moins 4 de ces 5 tables !
    Pour l'instant les tables contiennent 4 ans de données, mais les requêtes portent essentiellement sur l'année en cours, et régulièrement sur l'année dernière. Presque rien sur les années précédentes N-2, N-3...
    Je pensais partitionner les tables en fonction des années, et éventuellement des mois (mais je ne suis pas sûr que ce soit efficace car la majorité des requêtes portent sur l'année entière).

  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 : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    moi ça me semble prématuré de partitionner si tu n'as pas fait un semblant d'analyse sur les causes des problèmes de perf: extent trop petit, initrans mal taillé, index incorrect, etc...

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Argh...
    Alors je ne suis pas DBA, je suis plus du côté "restitution" et nous avons de gros problème de temps de réponse.
    Je cherche donc comment améliorer les choses avec mes petits moyens...
    Du coup je ne comprend pas bien : "extent trop petit, initrans mal taillé, ..." pour les indexs je pense qu'ils ne sont pas trop mal, on doit quand même pouvoir faire du ménage (sur les 11 et les 7).

  6. #6
    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
    Moi aussi je pense à partitionner des index et des données. Principalement pour ne pas garder online des Go de données d'années passées sur lesquelles on ne travaille plus du tout.
    Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

  7. #7
    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
    Il faut surtout regarder les plan d'exécution des requêtes longues (c'est assez facile à voir avec toad par exemple puisque ce sont elles qui sont la majeures partie du temps dans les session actives.

    Parcque si tu ne fais pas ça tu risque de faire tout un gros travail pour rien....

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par Greg07
    Alors je ne suis pas DBA, je suis plus du côté "restitution" et nous avons de gros problème de temps de réponse.
    Il est alors temps de faire appel aux compétences de ton DBA

    chacun son boulot

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par remi4444
    Il faut surtout regarder les plan d'exécution des requêtes longues (c'est assez facile à voir avec toad par exemple puisque ce sont elles qui sont la majeures partie du temps dans les session actives.

    Parcque si tu ne fais pas ça tu risque de faire tout un gros travail pour rien....
    J'ai bien Toad

    Citation Envoyé par Fred_D
    Il est alors temps de faire appel aux compétences de ton DBA

    chacun son boulot
    Si seulement c'était aussi simple

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 74
    Points : 95
    Points
    95
    Par défaut
    Si tu as les moyens et la place de le faire, ça vaut le coup de faire un test de perf après avoir partitionné tes tables sur l'année, puis recrée tes index en local non-préfixé (seulement ceux comprenant la date dans l'index).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    CREATE TABLE TOTO (
      idassure	NUMBER(10)	NOT NULL,
      date_maj	DATE		NOT NULL,
      idpersonn	NUMBER(12),
      ) TABLESPACE &tbs_data
    PARTITION BY RANGE(date_maj)
    (	PARTITION 2001 VALUES LESS THAN (TO_DATE('01/01/2002','dd/mm/yyyy'),
    	PARTITION 2002 VALUES LESS THAN (TO_DATE('01/01/2003','dd/mm/yyyy'),
    ...
    	PARTITION 2006 VALUES LESS THAN (maxvalue)
    );
     
    Ensuite tu peux créer un  index en local
    CREATE INDEX TOTO_IDPERSONN_IN ON TOTO
    (idpersonn)
    TABLESPACE TITI LOCAL;
    Tu vas alors avoir un index sur la colonne idpersonn mais partitionné sur la colonne datemaj (Attention, cet index ne sera correctement utilisé si et seulement si tu as la clause AND datemaj = 'date_voulue' dans tes requêtes.

    Les autres types de partitionnement sont par list ou par hachage.

Discussions similaires

  1. Déplacement de lignes d'une partition à une autre
    Par marcofil dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 22/08/2006, 17h55
  2. Transferer 500 millions de lignes
    Par Kikoune dans le forum Oracle
    Réponses: 4
    Dernier message: 26/05/2006, 17h09
  3. performances mysql (10 a 100 millions de rows)
    Par killy-kun dans le forum Outils
    Réponses: 1
    Dernier message: 21/07/2005, 15h06
  4. [SELECT sur 16 millions de lignes] délai très grand
    Par localhost dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/11/2004, 17h04
  5. Evaluation du matériel pour une bdd env. 100 millions lignes
    Par Pierrinot dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 03/11/2004, 11h29

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