Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2008, 17h16   #1
Membre régulier
 
Inscription : avril 2003
Messages : 131
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 131
Points : 72
Points : 72
Par défaut index, quand les calculer

Bonjour,

Je déplace une table (9i) sur une nouvelle instance (10g).

La procédure est la suivante:

1/ création de la table
2/ copie des données via dblink

Sur cette table j'ai trois index.

Est-il plus interessant en terme de temps de générer les index une fois toutes les données présentent, ou bien de créer les index à la suite de la création de la table, avant l'insertion des données ?

Est ce qu'une méthode est plus avantageuse que l'autre ?

Merci d'avance.
DjinnS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 17h30   #2
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 483
Points : 1 483
ça sera sans doute plus rapide d'insérer les données et ensuite créer l'index que l'inverse
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2008, 17h36   #3
Nouveau Membre du Club
 
Inscription : juillet 2005
Messages : 38
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 38
Points : 37
Points : 37
Carrement plus avantageux de créer l'index à la fin !
raisons :
  • le temps de traitement total sera plus rapide (un seul tri à faire au global, et pas de vérification au fur et à mesure)
  • l'index sera plus compact, et son arbre B-Tree sera propre (donc optimal)
mildiou51 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 11h29   #4
Membre régulier
 
Inscription : avril 2003
Messages : 131
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 131
Points : 72
Points : 72
Merci beaucoup pour vos retours.

Je vais tester ça ^^
DjinnS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 11h33   #5
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Attention : si la table est grosse, le calcul de l'index en one-shot à la fin va être long et très consommateur de temp.
Si vous le créé au début, l'insertion unitaire sera plus lente, certes, mais vous n'aurez pas 20h de calcul d'index ni besoin d'allouer 30 Go de TEMP...
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 17h00   #6
Membre régulier
 
Inscription : avril 2003
Messages : 131
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 131
Points : 72
Points : 72
Je "ré-ouvre le post" à la suite de ta remarque.

Mes index sont partitionnés. Je pense reconstruire par partition, ça me parait plus logique. J'ai pu aussi voir qu'il y avait l'option PARALLEL de disponible, qui semble-t-il permet d'augmenter le nombre de processus qui collecte les informations pour la construction de l'index.

Certaines de mes tables sont relativement importantes (+300go) donc j'ai effectivement des problématiques de temps qui peuvent apparaître. Je recherche donc des optimisations permettant de gagner du temps ^^

J'ai vu qu'on pouvait jouer sur la taille de sort area size. Sur asktom j'ai pu récupérer l'info de 150% de la taille de l'index, mais dans mon cas ca peut faire beaucoup 150% ^^
DjinnS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 17h08   #7
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
les indexes sont-ils partitionnés ?
quelle est la taille maximale de l'index / partition d'index ?

Donc, vu les volumétrie, je pense que calculer les indexes après insertions sera TRES difficile !
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 17h16   #8
Membre régulier
 
Inscription : avril 2003
Messages : 131
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 131
Points : 72
Points : 72
Oui les index sont partitionnés.

Pour la taille je ne sais pas et je n'ai pas la possibilité de le savoir tout de suite ^^

Par contre (désolé mais je maîtrise vraiment pas les index) je ne comprends comment sont répartis les index via le partitionnement:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  CREATE INDEX "toto"."titi_idx" ON "toto"."titi" ("col1", "col2")
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 10485760 NEXT 5242880
  PCTINCREASE 0 BUFFER_POOL DEFAULT)
  TABLESPACE "tbs" LOCAL
 (PARTITION "PARTX_titi_idx1"
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 10485760 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "tbs_1" ,
 PARTITION "PARTX_titi_idx1"
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 10485760 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "tbs_2" ,
 PARTITION "PARTX_titi_idx3"
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE(INITIAL 10485760 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "tbs_3" ....
J'ai extrais les données avec dbms_metadata depuis la base source (j'ai remplacé le nom des cols, tbs, etc ... normal que ce soit pas forcement cohérent ...).

Donc j'ai pleins de partition ... mais le stockage se fait sur quel critère ? Est ce que je n'aurais pas oublié quelque chose avec dbms_metadata ?
DjinnS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 18h24   #9
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Citation:
Envoyé par LeoAnderson Voir le message
Attention : si la table est grosse, le calcul de l'index en one-shot à la fin va être long et très consommateur de temp.
Si vous le créé au début, l'insertion unitaire sera plus lente, certes, mais vous n'aurez pas 20h de calcul d'index ni besoin d'allouer 30 Go de TEMP...
Tu as raison sur ce point.
Maintenant si le choix est entre charger massivement les données en présence de l'index ou charger massivement les données puis créer l'index alors le deuxième choix est meilleur ...
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 18h30   #10
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
Citation:
Envoyé par Michel SALAIS Voir le message
Tu as raison sur ce point.
Maintenant si le choix est entre charger massivement les données en présence de l'index ou charger massivement les données puis créer les index alors le deuxième choix est meilleur ...
à condition d'avoir du CPU et du TEMP en pagaille
si on est serré niveau disque, l'option 1 s'impose
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 21h08   #11
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Citation:
Envoyé par LeoAnderson Voir le message
à condition d'avoir du CPU et du TEMP en pagaille
si on est serré niveau disque, l'option 1 s'impose
A condition de ne pas être préssé
__________________
Consultant et formateur Oracle
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 21h21   #12
Expert Confirmé
 
Avatar de LeoAnderson
 
Inscription : septembre 2004
Messages : 2 942
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2 942
Points : 2 972
Points : 2 972
c'est clair que si on est pressé mais qu'on a pas de disque ni de CPU ni de RAM, ça va être dur !
LeoAnderson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 23h30   #13
Membre du Club
 
Inscription : janvier 2008
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 50
Points : 47
Points : 47
Par défaut NOLOGGING

Si je puis me permettre, considère également l'option du NOLOGGING / LOGGING sur tes segments.
wondersonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2008, 23h32   #14
Membre du Club
 
Inscription : janvier 2008
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 50
Points : 47
Points : 47
Ah et puis il existe l'option dans la commande de création d'index...
wondersonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2008, 12h20   #15
Membre régulier
 
Inscription : avril 2003
Messages : 131
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 131
Points : 72
Points : 72
J'ai pas forcement du temps ... mais j'ai une grosse machine ^^

Je vais parralléliser par partition quand c'est possible et je vais jeter un coup d'oeil sur ce que propose wondersonic.
DjinnS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2008, 13h11   #16
Membre régulier
 
Inscription : avril 2003
Messages : 131
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 131
Points : 72
Points : 72
Apparemment c'est automatique sous la 10g, faudra que je vérifie lorsque l'index sera créé et rebuild ...

Par contre est ce que quelqu'un pourrait m'expliquer l'impact qu'a le paramètre PARALLEL dans ALTER INDEX idx REBUILD PARALLEL 5, par exemple. J'ai pu lire que ça permettait d'avoir plusieurs processus qui s'occupe du calcul de l'index mais qu'une valeur était modifiée dans l'index (la colonne degree) et que cela avait ensuite, si j'ai bien compris, une incidence sur les requêtes effectuées.

Mais je n'ai pas compris qu'elle était cet impact.

On peu par la suite, avec un ALTER INDEX, repasser en defaut, mais là aussi, quel est l'impact ?
DjinnS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h25.


 
 
 
 
Partenaires

Hébergement Web