|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
Bonjour,
Une application DELPHI /Oracle 9.2 tourne actuellement sur un poste classique de façon correcte. Tout est sur le même serveur (application delphi + serveur oracle). Le poste est sous Windows XP. Cette même application a été placé sur un nouveau serveur plus performant (XEON 3ghz double coeur, disques durs SCSI en RAID 1, sous windows 2003...) et les performances lors de l'exécution d'un traitement ont été divisé par 3/4 ce qui n'est pas acceptable. On m'a chargé de détecter les causes de cette mauvaise performance. Pendant les tests, il a été détecté qu'un seul coeur du processeur sur les 2 est utilisé par l'application en delphi ainsi que le serveur oracle. Cependant, cela ne semble pas être ce qui bride les performances puisque le processeur est rarement à 50 % (50% représentant la totalité de l'un des deux coeurs) Un bench des disques dur a montré que les performances sont acceptables. Une analyse des traces oracle du traitement avec TKPROF (800mo de traces oracle) donne les résultats suivants (certaines requêtes ont été enlevées pour que ce soit moins long) qui sont très étonnants au niveau du elapsed time du FETCH du "OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS", tout en bas Le traitement dure de l'ordre de 24h au lieu de 5-6 heures sur l'ancien serveur. Code :
A quoi correspond exactement le "OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS" ? Code :
je n'ai pas la main sur le serveur. Avant que je puisse faire de nouvelles demandes de test, je dois avoir une piste sérieuse... Merci pour votre aide! |
||||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
y'a un problème si un seul core est utilisé... faut quand même se pencher sur ce problème. Quand au elapsed très grand, c'est juste un bug, aucune requête n'a un tel elapsed. Faudrait une trace au moins de niveau 8 pour voir les événements d'attente. Utilises-tu le parallélisme ?
|
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Est-ce qu'il y d'autres éléments qui ont changé en changeant de machine :
Est-ce que vous pouvez comparer les résultats TKPROF avec les mêmes données et les mêmes requêtes sur les 2 environnements ? Les chiffres "OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS" correspondent à la somme des temps d'exécutions pour tout le SQL analysé par TKPROF (SQL non récursif = le SQL directement soumis par l'application). |
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
La version oracle au niveau du serveur est la 9.2 sur les 2 environnements.
Je ne sais pas au niveau du client. La façon de calculer les stats est la même sur les 2 environnements (le calcul des stats est fait régulièrement par l'appli en Delphi) Qu'entends-tu exactement par paramètres d'initialisation de l'instance ? Le code applicatif est exactement le même. Une analyse TKPROF a été fait sur un poste de développement. Lors des traitements, les traces sont trop grosses (on atteint rapidement plusieurs centaines de mo) pour être complètes. Les traces sont donc désactivées lorsque les fichiers de traces sont importants (800mo à 1go). On n'a donc pas à chaque fois des traces correspondant exactement au même nombre de requêtes. Ci-dessous le fichier tkprof en environnement de développement. Il n'est pas possible de générer des traces oracle sur le poste qui fonctionne (il est utilisé en production) Le fetch est plus normal ici. Code :
|
||
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() DBA Oracle freelance Inscription : janvier 2005 Messages : 558 ![]() |
Un petit report de statspack serait utile.
Coté RAM, le nouveau serveur a t-il une quantité >= à l'ancien ? Tout est fait sur le serveur ? Il n'y a pas une sonde ou un antivirus entre le poste client et le serveur qui ralentirait le traffic de data ? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Les paramètres d'initialisation = le contenu du fichier init.ora (pfile ou spfile).
On voit que votre environnement de développement n'a pas les mêmes données (il y a beaucoup moins de lignes dans les tables). Il faudrait essayer de faire sauter la limitation sur le fichier trace sinon on ne peut pas même pas être sûr d'avoir les requêtes les plus lourdes. Et comme déjà demandé, il faudrait avoir les waits. |
|
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
Concernant la ram, il y a sur les 2 serveurs 1GO.
(le passage à 2Go de ram ne serait pas superflu) Cela me parait difficile de ne pas arrêter les traces oracle avant la fin, sinon cela prendra trop de place. L'antivirus a été désactivé. On m'a fourni plusieurs captures d'écran du gestionnaire des tâches pendant la durée des traitements, le processus oracle est celui qui utilise le plus le CPU. Ensuite l'application en delphi est la 2ème plus gourmande. Cependant, le CPU est en dessous de 50%. Je vais essayer de récupérer le fichier init.ora demain... Pour avoir les waits, quelle est la méthode la plus simple? Merci Ci-dessous une liste de paramètres oracle (identiques sur les 2 plateformes) Il y a aussi le GETHITRATIO du nouveau serveur (plus élevé que l'autre serveur en prod actuellement) Code :
|
||
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
et la volumétrie est la même ? T'es sûr que l'OS ne swappe pas ?
|
|
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
y'a un truc qui m'échappe : dans le tkprof, la somme n'a rien à voir avec le détail...
Soit il manque des requêtes, soit le TKProf n'est pas de confiance.... Dans tous les cas, on n'a pas les billes.... |
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
j'avais enlevé certaines parties du premier résultat tkprof (nouveau serveur) , mais le 2ème est bien complet (serveur de développement).
|
|
|
00
|
|
|
#11 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
Au niveau de la volumétrie des données en base, c'est sûr qu'elle n'est pas plus importante sur le nouveau serveur par rapport à l'ancien qui fonctionne correctement pour une configuration matérielle inférieure...
Concernant le swap de l'OS, je ne peux pas le dire de façon certaine. Je viens de lire cette page http://shsc.info/WindowsMemoryManagement qui m'a appris qu'il n'est pas facile de savoir s'il manque de la mémoire ou non. J'ai les captures suivantes du task manager pendant le traitement (malheureusement je n'ai pas l'onglet performance, bien que je l'avais demandé à la personne qui a fait les captures...) On voit en bas la quantité de mémoire utilisée 1833992K / 3094716K (le serveur a 1go de RAM) Il y a pas mal de page faults, mais étant donné le grand nombre de lecture/écriture, je ne suis pas sûr que cela soit choquant. ![]() ![]() Gestion_Sillons c'est l'application en Delphi qui entre autre exécute les requêtes. |
|
|
00
|
|
|
#12 | |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Citation:
je comprends que c'est pas jouable d'uploader 800 Mo mais va falloir trouver quelque chose pour qu'on ait les infos !! par contre, les 140 000 fautes de pages sur le process Oracle, c'est pas top... http://www.developpez.net/forums/sho...d.php?t=155205 ==> Il swap... |
|
|
|
00
|
|
|
#13 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
1.8G de mémoire utilisée alors que tu as 1Go de RAM... on peut donc penser que ça swappe
Ensuite, faudrait trouver la requête qui prend le plus de temps et vérifier que le plan est le même sur les 2 instances. |
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
le hit ratio est comment ?
si le hit ratio est bon, comme il swap, ça veut dire qu'Oracle croit avoir plus de mémoire qu'il n'en a réellement => baisser la SGA si le hit ratio est mauvais, Oracle demande des lectures physiques et donc, on ne devrait pas avoit de fautes de pages. |
|
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
Le Hit Ratio est de 0,898646035 sur le nouveau serveur qui a des pbs de performances.
Le SGA_max_size est de 328014848. Est-ce que cette valeur est trop importante? Les temps d'exécution des requêtes ne sont pas importants par rapport à la durée totale du traitement. Je ne vois donc pas trop l'intérêt d'aller plus loin dans l'analyse de leurs plans d'exécution. Seul le elapsed time des fetch pour l'"OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS" est vraiment étonnant... Le résultat complet du rapport TKPROF des traces générées (800mo de traces analysées avec TKPROF qui ne représentent qu'une partie du traitement), est trop long pour l'afficher entièrement sur cette page... Les logs applicatifs montrent que c'est tout le traitement qui est plus long que la normale et pas une partie en particulier. Merci pour l'aide que vous m'avez déjà apporté! |
|
|
00
|
|
|
#16 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
un SGA_MAX_SIZE de 300Mo c'est pas délirant mais faut voir ce qui est sur le serveur parce que là visiblement ça swape... et si tu avais bien voulu faire une trace de level 8 tu pourrais probablement voir des waits sur les I/O
|
|
|
00
|
|
|
#17 | ||
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
Je viens de voir dans le fichier tkprof des traces du nouveau serveur la requête suivante que j'avais enlevé dans la partie affichée sur le forum
Code :
|
||
|
|
00
|
|
|
#18 |
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
pouvez-vous uploader le zip de la trace avant tkprof concernant simplement cette requête ?
|
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
Pour l'analyse level 8, je vais essayer d'en obtenir une. Cependant ça ne va pas être possible rapidement... (vacances oblige...)
|
|
|
00
|
|
|
#20 |
|
Invité de passage
![]() Inscription : avril 2003 Messages : 17 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com