|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : janvier 2004 Messages : 3 ![]() |
Bonjours à tous,
Dans ma société nous utilisons Oracle 8i avec les forms pour notre ERP. Chaque soir nous lancons un calcul de besoin un traitement qui durait au début 3h puis petit à petit il est monté en temps. J'ai une procedure simple que je lancais de temps à autre 3 ou 4 fois par an pour optimiser les tables => analyse estimate statistics 20% soit avec l'outil graphique soit en script sql. En général je passais de 8h à 3h de calcul, mais depuis début septembre nous sommes passé de 8h à 16h puis maintenant 30h !!! J'ai bien lancé l'analyse mais cela n'a absolument rien changé. Les changements ont eu lieu par "bond" un jour c'est 8h le lendemain 16h. Le volume de donnée dans la base à une progression constante, nous n'avons pas pu relier cette augmentation de temps à une forte augmentation de donnée. Avez vous des idées ? Augmenter l'analyse en passant de 20% à 30% ? Detruire les stats et les recalculer ? PS: Cette base est utilisée depuis 7ans sans jamais avoir rencontré de problème. Merci d'avance pour vos idées |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : novembre 2003 Messages : 125 ![]() |
Bonjour,
Qu'en est-il de vos index? Les avez-vous reconstruit? |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : janvier 2004 Messages : 3 ![]() |
Oui mes tables ont bien des index mais je ne connais pas la manip pour les reconstruire par contre doit on renseigner a nouveau tous les champs de toutes les tables pour refaire les index ?
J'ai lu sur des faq que l'on devait parfois supprimer les stats, reconstruire les index puis recalculer les stats, c'est de cette opération que vous parlez ? Merci |
|
|
00
|
|
|
#4 | ||
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 94 ![]() |
mais aussi exemple pour les stats:
Code :
|
||
|
|
00
|
|
|
#5 | |
|
Expert Confirmé
![]() dba Inscription : juillet 2007 Messages : 2 523 ![]() |
Citation:
Un index c'est juste un outil pour optimiser les requêtes. N'hésite pas à relancer plus souvent le calcul de tes statistiques, surtout si ta base bouge beaucoup. Un job qui lance ça une fois par semaine est un bon compromis. |
|
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 357 ![]() |
Pout trouver la source de ton probleme ,
tu peux utililiser different outil oracle dont tu trouvera facilement la doc sur le net (tuto developpez.net, doc officiele oracle )tel que -statpack -wait events -Explain plan -trassage de session / TKPROF (-hint) Le but de ces outils est de relever la necessite de realiser un upgrade materiel et/ou la modification de parametres Oracle. Mais si tu n,a ni le temps ni le courage d'etudier ces outils, tu peux essayer d augmenter l'equivalant oracle 8 du parametre oracle 9 db_cache_size. Lorsque je debutai sur Oracle, cette manip m avait permis de regler en 5 minutes un probleme similaire au tien. |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : janvier 2004 Messages : 3 ![]() |
Merci de votre aide
Malheureusement pour l'instant rien n'a changé voici ce que j'ai lancé: Sur environ 2000 indexes j'ai utilisé les commandes suivantes ALTER INDEX <index_name> REBUILD; ANALYZE INDEX <index_name> estimate statistics sample 25 percent; Puis j'ai lancé sur les tables une analyse ANALYZE <table> estimate statistics sample 25 percent; Pour le moment le traitement qui durait 8h debut septembre dure toujours 30 heures voir plus. Pourtant le volume de la base n'a pas augmenté plus que l'habituel ! Merci encore |
|
|
00
|
|
|
#8 |
|
Membre chevronné
![]() DBA Oracle freelance Inscription : janvier 2005 Messages : 558 ![]() |
Le plan d'exécution a t-il changé entre les versions 8h et 30h ?
Statspack devrait te fournir des indications sur le type d'attentes observées. Les index utilisés sont-ils valides (en principe oui car tu as tout reconstruis) ? Une des clé d'index n'a peut être pas une cardinalité suffisante. Essaie un : dbms_stats.gather_table_stats(owner=>'ton_schema',tabname=>'ta_table', estimate_percent=>20,method_opt=>'for all indexed columns'); Ta hash/sort_area_size est peut être trop petite si la requête fait du hash join ou du tri (order by, group by...) => écritures dans le tablespace temporaire. Augmentes sensiblement sort_area_size et/ou hash_area_size Si hash_area_size non définie, modifies sort_area_size (non dynamique en 8i). |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() Inscription : juillet 2003 Messages : 3 453 ![]() |
Si ça se trouve un index à été supprimé, ou alors un trigger de créé sur une table du script.
Le plus simple c'est de revoir le code du traitement point par point.
__________________
More Code : More Bugs. Less Code : Less Bugs |
|
|
00
|
|
|
#10 |
|
Membre confirmé
![]() Inscription : juillet 2007 Messages : 357 ![]() |
Il est fort possible que ton systeme os + oracle pagine de maniere excessive.
Malheureusement dans ce cas il n y a pas de procedure concrete (utilisation de differents outils , requete, et lecture de beaucoup de doc,...) , ni de solution concrete (modif parametre oracle, upgrade materiel, upgrade logiciel,...) Voici un cas auquel j.ai ete confronte sur un systeme windows 2000 serveur standard avec un moteur oracle 9 et qui pourra peut-etre t aider. -tout les jours en fin de journee une longue requete etait lancee et se realisait correctement -En journee toute les requetes des differentes appli se deroulait normalement -Une nouvelle appli avait ete developee dont certaine option realisait des requete jointe qui n avait jamais ete executee avant sur le systeme -Lorsque ce type de requete etait lancee sur le site de travail, tout le systeme devenait execessivement lent et cela etait du a une pagination os excessive -Si l on redemarrai le server , tout revenait a son etat normal. - Au final on a juste modifier le code de l application. Je te conseille donc de redemarre ton systeme et voir si sa resout le probleme. Sinon jete un oeuil a sort_area_size et db_cache_size |
|
|
00
|
|
|
#11 |
|
Membre régulier
![]() Inscription : mai 2004 Messages : 167 ![]() |
Sinon, au niveau de l'analyze, je l'utilise de la manière suivante, et ca a l'air de fonctionner plutot bien jusque maintenant :
analyze table ma_table compute statistics for table for all indexes for all indexed columns;
__________________
La naissance est le seul fruit du hasard |
|
|
00
|
|
|
#12 |
|
Invité régulier
![]() Inscription : avril 2005 Messages : 22 ![]() |
Bonjour,
Merci beaucoup tomca pour ta requête Après plusieurs essais et tentatives infructeuses (pb de tablespace), j'ai exécuté ton script sur toutes les tables de mon schéma. Ma requête s'est ensuite exécutée très rapidement comme par magie. Maintenant reste à savoir à quelle fréquence exécuté ce calcul de stats. |
|
|
00
|
|
|
#13 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
attention depuis la 9i c'est DBMS_STATS qui doit être utilisé plutôt que ANALYZE.
|
|
|
00
|
|
|
#14 | |
|
Membre confirmé
![]() Inscription : août 2005 Messages : 270 ![]() |
Citation:
La fréquence necessaire dépend de la vitesse à laquelle ta base évolue. Si ça se trouve tu n'en a besoin qu'une fois par an ! Le plus simple et de greffer le calcul des stats sur un traitement batch déjà plannifié qui tourne de temps en temps... Toutes les semaines ou tout les mois... Tout les jours si tu es d'un naturel inquiet ! De toute façon, c'est sans risque ! |
|
|
|
00
|
|
|
#15 |
|
Membre confirmé
![]() Alain Inscription : mars 2004 Messages : 249 ![]() |
|
|
|
00
|
|
|
#16 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
ouais enfin qu'en t'en es à des stats qui pêtent le tablespace c'est que t'as d'autres problèmes qui vont pas tarder aussi
|
|
|
00
|
|
|
#17 |
|
Membre confirmé
![]() Inscription : août 2005 Messages : 270 ![]() |
Et comme Oracle à ma connaissance ne garde pas les anciennes statistiques, d'un coup sur l'autre, ça va pas être la mort !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com