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 05/04/2008, 10h10   #1
Invité de passage
 
Inscription : avril 2008
Messages : 3
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : avril 2008
Messages : 3
Points : 0
Points : 0
Par défaut Deadlock et clés étrangères

Bonjour,

Nous travaillons avec une base Oracle 10g et nous avons régulièrement des problèmes de deadlock. L'origine du problème est l'absence d'index sur les clés étrangères des tables.

Nous avons donc deux solutions pour régler cela :
- ajouter des index sur les clés étrangères de nos tables
ou - supprimer la notion de clé étrangère dans notre base

La première solution semble la plus sûre et la plus "intuitive", mais l'équipe dont je fais partie semble privilégier la seconde. Les arguments sont que :
1- un certain nombre de progiciels très connus n utilisent pas les clés étrangères et fonctionnent
2- l'ajout d'index ajouterait une couche au système, or en général moins on a d'élément dans un système (plus le système est simple) et meilleur sont les performances.

Pour le point 1, j'ai fait le même constat pour un progiciel particulier, mais je n'ai pas assez d'exemples pour me faire une idée.

Pour le point 2, les index contribuent aussi à améliorer les performances des requêtes et ils font parti des fonctions de base d'Oracle, donc l'argument ne me semble pas suffisant.

Pourriez-vous apporter des éléments (dans un sens ou dans l'autre) pour choisir la meilleur solution ?

Merci de vos réponses.
Sdev666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2008, 12h30   #2
Membre émérite
 
Avatar de Yorglaa
 
Inscription : janvier 2004
Messages : 845
Détails du profil
Informations personnelles :
Âge : 41
Localisation : Suisse

Informations forums :
Inscription : janvier 2004
Messages : 845
Points : 939
Points : 939
à mon avis, se passer de clefs étrangères est une erreur dans la plupart des cas...

Les FK sont un moyen de garantir l'intégrité relationnelle des données, donc s'en passer implique de risquer des données incohérentes, à moins de programmer toute cette logique d'intégrité du coté client (client lourd) ou middle tier (3 tiers).

d'où ma question suivante : pourquoi réinventer la roue ?
Oracle propose en natif de gérer ces règles d'intégrité, alors pourquoi les reprogrammer "à la main" dans son propre logiciel ?

outre le risque d'erreur, de la masse de test "dans tous les sens" que ça implique, etc... il ne faut pas oublier q'une DB ça "s'attaque" aussi par d'autres outils qe le(s) logiciel(s) client(s).

je pense tout particulièrement aux outils de gestion et/ou de Dev (Toad, SQLPlus, etc...). et là, plus acune règle d'intégrité ne sera appliquée si un script malencontreux venait à faire des bêtises...

ensuite de ça, les index sont clairement là pour aider aux performances... et pas seulement pour faire les locks appropriés lors d'opérations DML.
donc lorsque ta DB, après 10 d'exploitation, contient plusieurs dizaines de GB de données mais pas d'index, ça va être coton pour donner des temps de réponses corrects aux applis qui vont s'y connecter.

enfin ce n'est que mon avis !
__________________
Il est plus facile de voir les signes avant-coureurs après coup que l'inverse !

Yorglaa
Yorglaa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2008, 11h33   #3
Invité de passage
 
Inscription : avril 2008
Messages : 3
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : avril 2008
Messages : 3
Points : 0
Points : 0
Merci Yorglaa.
Quelqu'un d'autre a-t-il un avis sur la question ?
Sdev666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2008, 15h31   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 975
Points : 3 975
Je partage l'avis de Yorglaa.
Autant assuré l'intégrité de la bd dans la bd au lieu de faire confiance aux autres... Et puis, les indexes optimisent les requétes.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2008, 08h46   #5
Invité de passage
 
Inscription : avril 2008
Messages : 3
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : avril 2008
Messages : 3
Points : 0
Points : 0
Personne n'a d'avis sur le fonctionnement des progiciel ?
Sdev666 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2008, 10h03   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par Sdev666 Voir le message
La première solution semble la plus sûre et la plus "intuitive", mais l'équipe dont je fais partie semble privilégier la seconde. Les arguments sont que :
1- un certain nombre de progiciels très connus n utilisent pas les clés étrangères et fonctionnent
2- l'ajout d'index ajouterait une couche au système, or en général moins on a d'élément dans un système (plus le système est simple) et meilleur sont les performances.
Ils sont un peu grave dans ton équipe... tout le monde fait n'importe quoi alors on y va

Beaucoup de progiciel se passent des clés étrangères pour améliorer la portabilité, tous les SGBD étant à l'époque de leur conception pas relationnelle. MAIS il y a des contre-exemples, et pas des moindres notamment avec OeBS : Oracle E-Businesse Suite, l'ERP d'Oracle.

Pas d'index = meilleures perfs, c'est la meilleur celle-là

Il faut créer les indexes, point... supprimer les FK et les indexes ça rime à rien... faut pas utiliser Oracle dans ce cas, des fichiers plats feront très bien l'affaire
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2008, 17h10   #7
Membre confirmé
 
Inscription : mars 2007
Messages : 750
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 750
Points : 277
Points : 277
Citation:
Pas d'index = meilleures perfs, c'est la meilleur celle-là
Moi ça ne me choque pas tant que ça. Parfois quand la table est mise à jour de manière très fréquente (dans un system OLTP) il est préférable de ne pas créer d'index => c'est un compromis à faire entre accélerer les select et ralentir les delete/update.
farenheiit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2008, 17h21   #8
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 975
Points : 3 975
Citation:
Envoyé par farenheiit Voir le message
Moi ça ne me choque pas tant que ça. Parfois quand la table est mise à jour de manière très fréquente (dans un system OLTP) il est préférable de ne pas créer d'index => c'est un compromis à faire entre accélerer les select et ralentir les delete/update.
C'est un cas particulier et alors, il faut faire quelques choses dans la bd pour ça et faire du tuning des requêtes.
Supprimmer tous les indexes parce qu'il existe des requetes pas optimales revient à utiliser un bazooka pour tuer une mouche.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2008, 17h23   #9
Membre confirmé
 
Inscription : mars 2007
Messages : 750
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 750
Points : 277
Points : 277
Citation:
Envoyé par Jerome_Mtl Voir le message
C'est un cas particulier et alors, il faut faire quelques choses dans la bd pour ça et faire du tuning des requêtes.
Supprimmer tous les indexes parce qu'il existe des requetes pas optimales revient à utiliser un bazooka pour tuer une mouche.
tout à fait d'accord
farenheiit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2008, 08h57   #10
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Citation:
Envoyé par farenheiit Voir le message
Moi ça ne me choque pas tant que ça. Parfois quand la table est mise à jour de manière très fréquente (dans un system OLTP) il est préférable de ne pas créer d'index => c'est un compromis à faire entre accélerer les select et ralentir les delete/update.
Qu'on ne mette pas d'index sur certaines petites tables ou si il y a plus de mises à jour que de sélection pourquoi pas... mais aucun index sur la totalité de la base c'est n'importe quoi sauf cas très particulier
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2008, 21h09   #11
Membre du Club
 
Avatar de lmartin
 
Inscription : avril 2008
Messages : 61
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 61
Points : 61
Points : 61
C'est assez bizarre de penser qu'on améliore les perfs en mettant toute la logique relationnelle dans le code applicatif plutôt que dans le système.

Sans parler du risque supporté en cas d'erreur dans le développement d'une évolution.
lmartin 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 23h40.


 
 
 
 
Partenaires

Hébergement Web