Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels 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 06/12/2011, 18h36   #1
Invité de passage
 
Inscription : février 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 32
Points : 4
Points : 4
Par défaut Comment bien placer ses index

Bonjour à tous!

Je vais essayer d’être clair dans mes explication mais c'est un peu confus dans ma tête...
Je travaille sur une base un de données oracle 10g qui se dégrade énormément au niveau des performances (insert/update, requête, activation des clés...). Je pense que le problème vient des index.

C'est une base de type 'BI'. J'ai une table de faits contenant environ 15 millions de lignes, et tout un ensemble de table de référence. Certaines tables de référence possèdent plusieurs milliers de ligne alors que d'autre n'en font à peine une dizaine.
Il y a environ 40 dimensions.

L'alimentation de la table de fait se fait à partir d'une table source. Lors de l'alimentation certaine dimension sont directement fournies. Aucune jointure n'est nécessaire. Pour d'autre, il faut faire une jointure avec la table de référence pour récupérer l'ID.

Au niveau de la restitution, les utilisateurs créent eux même leur requête (avec Brio/HPS) à partir de libellé, donc à chaque fois une jointure est faite entre la table de fait et la table de dimension sur la PK de la dimension.

Il y a un index Bitmat sur tous les champs de la table de fait pointant sur une dimension. C'était comme ca quand je suis arrivé et je pense que le soucis vient de là.

Déjà est-ce que le problème vient réellement de là? Faut-il mettre un index sur chaque champs? (sachant qu'une jointure peut être fait sur tous les champs).

Sinon comment bien choisir les champs où mettre les index?
Faut-il privilégier les champs ayant beaucoup de valeurs différentes?
Les champs où l'on fait des jointures lors de l'alimentation?

Faut-il essayer de recréer les index régulièrement?

Par avance merci pour vos conseils!!
khomar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 19h31   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 435
Points : 10 435
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Si vous n'êtes pas allergique à l'anglais, dans la documentation Oracle tout le chapitre sur le datawarehouse est plutôt bien écrit.

C'est assez long à lire, mais si vous êtes confronté à ces problématiques, ça vaut le coup.
http://docs.oracle.com/cd/E11882_01/...e25554/toc.htm
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 20h20   #3
Membre Expert
 
Avatar de pachot
 
Homme Franck Pachot
DBA Oracle
Inscription : novembre 2007
Messages : 706
Détails du profil
Informations personnelles :
Nom : Homme Franck Pachot
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : DBA Oracle
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2007
Messages : 706
Points : 1 645
Points : 1 645
Bonjour,

Un index bitmap sur chaque colonne de dimension est en soi une bonne modélisation pour un modèle en étoile.
A condition que:
- les restitutions vont chercher peu de lignes de la table de fait une fois que tous les prédicats sur les dimensions sont appliqués.
- les chargements se font en bloc, et non pas avec des inserts lignes à lignes.

L'idée, c'est que les prédicats sont appliqués sur les dimensions, les entrées des index bitmap sont combinées pour aller chercher les lignes intéressantes par leur rowid.

Par contre, les index bitmap se dégradent très vite sur des insert/update/delete ligne à ligne. S'il y a beaucoup de ces manipulations à faire, alors on passe par une table de staging puis par un insert massif dans la table de fait.

Cordialement,
Franck.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
pachot est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/12/2011, 20h49   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Citation:
Envoyé par khomar Voir le message
Il y a un index Bitmat sur tous les champs de la table de fait pointant sur une dimension. C'était comme ca quand je suis arrivé et je pense que le soucis vient de là.
En plus de lire le reste de la doc, commence peut être par Optimizing Star Queries pour essayer de répondre à tes questions concernant les index bitmap.

Tu peux modifier le paramètre STAR_TRANSFORMATION_ENABLED au niveau de la session (via alter session).
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 00h17   #5
Invité de passage
 
Inscription : février 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 32
Points : 4
Points : 4
Merci pour ces réponses! Je vais aller lire la doc.
khomar 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 21h59.


 
 
 
 
Partenaires

Hébergement Web