|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
Voila j'ai une requête type update tapant sur davantage de champs:
Code :
Les stats sont à jour, la table ne posséde qu'un index PK. Voila j'aimerai savoir si il était possible d'améliorer les perfs concernant un update, par exemple avec un hint , ou au niveau serveur ? il ne m'est pas possible pour des raisons applicatives d'utiliser un curseur par exemple. Un DBA débutant qui vous remerci d'avance. |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
faudrait voir l'explain plan pour voir si l'index est utilisé à bon escient avec le nombre de lignes updatées par rapport au nombre de lignes total. Est-ce qu'il y a des triggers ou contraintes sur ta table ?
|
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
En fait l'update est incorporé de maniére applicative dans le traitement, ci bien que l'utilisateur est incapable de me donner la requête compléte.
Si j'utilise une requête update simple de mon côté le plan d'execution indique bien qu'il utilise l'index PK, il s'agit d'un index partitionné, ainsi que la table. La baisse de perfs ne peut être du qu'a une mauvaise utilisation de l'index ?, si la clause where ne fait pas reference a l'index il serai donc bon d'en creer un ? |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Bah ça peut être à cause de plein de chose, là ça devient bien plus complexe que ton 1° message : partitionnement + clause WHERE complexe... faudrait quand même penser à donner tous les éléments tout de suite
déjà, es-tu bien certains que ça vient de l'update ? As-tu fait une trace ou au moins suivi les événements d'attente dans v$session_wait pendant que la requête tourne ? |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
Non, il a stoppé la session dés qui l'a relance j'observerai les événements sur lesquelles la requête galére dans la vue v$session_events v$session_waits et si ça donne rien je pousserai via une analyze vers tk_prof et je vous tiens au courant.
Mais ma question a la base c y'a t'il des solutions usinés pour améliorer les performances d'un gros update ? sans vraiment rentrez dans le détail de la requête me concernant étant donné que je n'y ai même pas accés ![]() Merci en ts cas Orafrance de ta rapidité. |
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
bah pas vraiment éventuellement vérifier que le type d'index (global ou local) répond bien aux exigences de la partition
|
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
Thx Ora, l'index utilise un partitionnement local personnelement rien ne me choque. Demain je demanderai de relancer la requête et j'y verrai de plus prés
.Je marque pas encore le probléme résolu, j'attend un peu. |
|
|
00
|
|
|
#8 |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
C'est quel type de partitionnement de la table? La clé de partitionnement est la colonne indexée?
|
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
Oui, le partitionnement se fait par hash sur la même colonne utilisé par l'index PK dc rien de choquant ?
Je vous tiens au jus pour la suite |
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
non, rien de choquant, y'a combien de partitions ?
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
8 partitions pour la table et autant pour l'index, hum ?
|
|
|
00
|
|
|
#12 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
rien à redire
|
|
|
00
|
|
|
#13 | |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Citation:
La clé de partitionnement est la clé priamire et la clause WHERE porte sur la clé primaire et le partitionnement est par hash et l'index est local. Rien de choquant dans tout ça ... Si tout ce qui précède est vrai et que l'instruction UPDATE utilise l'index alors il n'y a pas de raison que l'instruction soit longue. Alors - soit l'index n'est pas utilisé - soit autre chose mais liée à l'instruction qui pose le problème (verrou par exemple) C'est bien sûr dans l'hypothèse que l'instruction UPDATE est l'origine de l'attente en l'absence de mesures de performance précises ... |
|
|
|
00
|
|
|
#14 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
Bon le client ve pas relancer ts de suite l'update dc je suis contraint au silence, le résumé que tu fais michel est celui ci. Je rajoute qu'il n'y pas de trigger sur la table.
Qd j'affiche le plan d'execution d'un update simple, utilisant la colonne indexe ds la clause where celui ci utilise bien l'index. Alors peut être des verrous c possible vi, mais sans doute autre chose que j'ignore encore ^^. Je suis en attente. Je vous remerci en attendant de l'attention porté a ma demande. |
|
|
00
|
|
|
#15 | ||||
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
Re,
Code :
Voici ce que me donne la vue v$session_event donc il a du mal pr lire les données en mémoire si j'ai bien compris. Voici le resultat de la mise en trace: Code :
Au niveau serveur la commande TOPAS ne n'indique aucun soucis particulier. On m'a conseiller de mettre la table en nologging histoire d'éviter l ecriture dans les redos. Autre indice le plan d'execution de la requête m'indique l'utilisation de "partition hash single", ce qui on m'a dit(on m'en dit des truks ^^) indique qu'il n'utilise pas la parralelisation des procs or dans le script de création d'index et de table il est bien précisé le degre de parralelisation qui est a 8. Quoi qu'il en soit je ne pe forcer la paralelisation avec un hint parralel etant donne que c un traitement applicatif auxquelle le user n'a pas accés. Voila voila ptetre vous allez me donner d'autres news ^^. PS: dsl pour les fautes d'orthographe, je suis un peu speed. |
||||
|
|
00
|
|
|
#16 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Apparemment il fait très bien son boulot c'est à dire d'écrire les données sur le disque en faisant des accés par index (db file sequential read).
Quand au parallélisme... bah c'est bien de paralléliser mais comme tu ne sollicites pas le CPU j'vois pas l'intérêt... celui qui t'as dit ça n'a probablement pas bien saisie le but du parallélisme qui reste un traitement TRES lourd (c'est pas le tout de paralléliser mais coordonner les process et consolider le résultat ça se fait pas tout seul Pour moi, t'as pas grand chose à faire si ce n'est s'interroger sur les performances des disques |
|
|
00
|
|
|
#17 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 49 ![]() |
Ouki merci Ora je vais voir avec l'exploitant alors pr qui me donne son avis sur ses disques.
|
|
|
00
|
|
|
#18 | |
|
Membre éprouvé
![]() Inscription : décembre 2007 Messages : 354 ![]() |
Citation:
Sans parler des "problèmes" que ça peut produire ... |
|
|
|
00
|
|
|
#19 | |
|
Membre du Club
![]() Inscription : janvier 2008 Messages : 50 ![]() |
Citation:
-2- Il s'agit d'un update par (et uniquement par) PK ? -3- Et il y en a de nombreux qui s'exécutent en parallèle ? |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com