|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Je suis sous Oracle8i.
J'ai une table très simple avec juste une PK et une FK. La particularité de cette table, c'est qu'en permanence il y a de nouveaux enregistrements qui sont insérés alors que d'autres sont supprimés. Le niveau moyen de remplissage de la table est entre 0 et 10 000 lignes mais il y a des centaines de milliers de lignes qui transitent par cette table chaque jour. Lorsque je regarde le coût d'un INSERT dans cette table l'optimizer m'affiche 979. Ce qui me parait délirant pour un simple INSERT. Si créé une seconde table avec exactement les mêmes caractéristiques le coût de l'INSERT est de 1. Ce qui me plaît evidemment mieux. J'ai donc plusieurs questions : - Qu'est ce qui fait que mon coût se dégrade ? - Est ce que cela a un vrai impact sur les performances ? J'ai fait un test en autotrace et j'ai pas vu de différence entre mes deux tables. - Si cela a un impact, quelles sont les paramètres à ajuster pour éviter que mon coût ne se degrade. Merci de votre aide & bon WE |
|
|
00
|
|
|
#2 | |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Citation:
Une cause possible pourrait être la gestion de l'espace libre dans les blocs (à confirmer par l'analyse des waits: voir http://download-west.oracle.com/docs...1_res.htm#1091 |
|
|
|
00
|
|
|
#3 | ||
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Merci de ta réponse, je vais essayer de traquer les waits pour en savoir plus.
Oui c'etait aussi mon idée que cela pouvait venir de la gestion des l espace libre mais j'ai pas encore les idées assez clair pour bien comprendre ce qui se passe. Voici quelques informations en plus et quelques questions aussi pour essayer de faire avancer le débat. Comme je l'ai dit ma table à entre 0 et 10 000 lignes statistiquement elle plus souvent 0 ligne mais c'est bien sur quand elle est rempli que cela devient important pour l'application. Comment feriez vous pour calculer les stats sur une table aussi fluctuante ? Si je les calcule au hasard je risque d'avoir des stat a 0 ligne qui ne seront peut etre pas efficace quand la table a 10 000 lignes. Si j'essaye de les calculer à 10 000 lignes. Il faut d'une part que je sois la au bon moment et j'ai aussi le risque non negligeable que qqun d'autre les recalcule "par hasard" au mauvais moment. Je pense de plus en plus mettre un hint RULE sur les requete qui utilise cette table. Vous en pennsez quoi ? Par ailleurs connaissez vous une bonne doc qui explique en detail les statistiques . Pour ma fameuse table qui a pour l'instant une seule ligne. J'ai Code :
Pour moi comme ma table est vide je devrait avoir BLOCKS = EMPTY_BLOCKS. Mais visiblement je n'ai rien compris
|
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
L'intérêt d'avoir des statistiques pour une table uniquement pour optimiser INSERT me semble limité parce qu'il y a (très) peu de façon différentes de faire un INSERT en SQL sur une table (à part le chargement direct par SQL*Loader qui ne fait pas un "vrai" INSERT ou peut-être les tables partitionnées ?).
Le fonctionnement de l'optimiseur et le calcul des statistiques pour la 8i est documenté dans http://download-west.oracle.com/docs...a76992/toc.htm |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
t'es sur que l'analyse n'est pas faite à un moment ou la table est vide ??
Sinon peut etre que tu pourrais monter le PCT-USED histoire que ça libère plus de place lors des deletes... Autre chose si tu ne fais pas d'update, mets ton pctfree à 0. mais bon c'est bizarre quand meme
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com