2009-09-25 4 views
0

Amis,Obtenir plus d'informations sur la cause de hauts chiffres indiqués dans TKPROF totaux récursives

J'étudie actuellement un problème de performance avec notre application. Le problème est qu'une opération qui devrait être complétée presque instantanément prend plusieurs minutes. Dans le cas où cela est important, l'architecture de l'application est Oracle Forms, Oracle Application Server et Oracle Database. Tous sont 10.x

Le client a fourni à la fois le fichier de trace sql "brut" et un formaté avec tkprof.

Vérification du fichier tkprof Je ne vois aucune instruction sql dans le fichier qui dure plus de 13 secondes. Il y a deux déclarations de système dans ce fichier. Dans la section récapitulative au bas du fichier, je peux voir que les totaux de temps CPU et temps écoulé pour les déclarations non-récurrentes sont respectivement de 3 et 11 secondes. (Indique un certain temps d'attente que je connais mais pas assez pour couvrir le temps indiqué par les utilisateurs)

Les totaux de TOUTES LES DECLARATIONS RECURSIVES semblent pointer vers le problème car le temps CPU est d'environ 350 secondes et le temps écoulé est maintenant presque 400 secondes. Ce qui est plus comme le temps que les utilisateurs disent qu'il faut.

Dans la documentation Oracle this est la seule référence que j'ai pu trouver sur les appels récursifs, ce qui explique davantage ce qu'ils sont.

Ma question est donc comment puis-je trouver plus d'informations sur les instructions récursives qui causent le problème?

Merci d'avance.

+0

Comment avez-vous exécuté tkprof? Vous devriez également voir les instructions récursives sauf si vous les avez explicitement exclues sur la ligne de commande avec SYS = non. Si vous trouvez les déclarations récursives, veuillez les poster. – dpbradley

+0

Merci pour le commentaire - Le fichier tkprof a été fourni par le client, y at-il de toute façon je peux déterminer à partir de ce fichier s'il a été exécuté avec sys = non? Je peux voir qu'ils ont utilisé l'option de tri exeela. –

+1

Le problème avec tkprof est qu'il résume et agrège l'information, ce qui peut rendre difficile de comprendre ce qui se passe réellement. – APC

Répondre

1

"Le client a fourni à la fois le fichier de trace SQL" brut "et un formaté avec tkprof." Vous pouvez exécuter votre propre tkprof sur le fichier de trace brut qui devrait fournir plus de détails.

Les principaux endroits pour les appels récursifs sont 1. Lors de l'analyse SQL. Il doit déterminer si les objets référencés sont des tables, des vues, des synonymes, etc., ce que sont les colonnes et les index, les privilèges, les statistiques et les histogrammes .... 2. Lorsque vous faites DDL. Il a besoin de mettre à jour tout un tas de métadonnées en indiquant quels objets existent, etc. Et, en tant qu'effet secondaire, il peut invalider les SQLs existants les amenant à être ré-analysés (voir 1). Cela peut être ce que vous appelez des "instructions système" 3. Appel d'un processus intégré, tel que la collecte de statistiques.

Donc, dans le TKPROF, vous pouvez regarder le nombre d'analyses à exécuter pour les instructions non récursives. La plupart du temps, vous voudriez voir très peu d'analyses. Si vous avez des déclarations avec beaucoup d'analyses, demandez pourquoi. J'ai eu une situation où une table était TRUNCATED au milieu d'une boucle qui a entraîné beaucoup d'analyse excessive.

+0

+1 pour les informations sur les appels récursifs - merci. –

Questions connexes