|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
Bonjour à tous,
Sous Oracle 10g (SE 10.2.0.1), EM nous indique quelles sont les requêtes qui consomment le plus de ressource. Depuis quelques temps, je trouve régulièrement les mêmes objets responsables de lenteurs. "EM" m'indique les éléments suivants : Code :
La problématique n'est pas lié qu'à cet indexe, parfois la table ou d'autres indexes de cette table posent également des problèmes. La table est constituée, actuellement, d'env. 7 millions de lignes. Chaque soir, on supprime env. 2 millions de lignes avant d'en insérer autant (Consolidation de données sur une année)! J'ai pu lire que la suppression en masse peut générer de la segmentation. "EM" me propose bien d'effectuer un "shrink" pour récupérer la place perdue (si j'ai bien compris). Un "shrink" ne vas pas nécessairement résoudre mon problème si je l'effectue tous les soirs. D'avance je remercie toutes personnes qui pourrait me donner une piste à explorer ou une méthodologie d'analyse pour déterminer où se situe le "hic". Excellent week-end à tous, Cédric |
||
|
|
00
|
|
|
#2 |
![]() ![]() |
Je vous conseille de supprimer votre index avant de supprimer / insérer vos données puis de le recréer après.
Vous allez gagner du temps.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
Bonjour Waldar,
J'avais également pensé à cela et après quelques recherches, j'avais trouvé une démonstration où la suppression des indexes et leur recréation était encore plus coûteuse que la suppression avec les indexes existant. J'avais donc décidé de ne pas implémenter cette solution. Sur vos conseils, j'ai modifié la procéudre en conséquence et je vérifierai demain le résultat. Merci et je vous tiendrai au courant! |
|
|
00
|
|
|
#4 |
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
Hello,
@Waldar : Merci pour ce conseil! Le traitement est passé d'un peu plus de 13h à ~5h30! Le changement est impressionnant. J'ai encore un problème de segmentation sur la table elle-même. Y aurait-il un moyen pour le solutionner? Dois-je modifier les paramètres de création des segments automatique (pctfree, ...) où dois-je reconstruire la table de temps en temps? D'avance merci pour vos conseils. Salutation à tous! |
|
|
00
|
|
|
#5 | ||||||||
|
Membre chevronné
![]() O. JolySupport Inscription : décembre 2010 Messages : 287 ![]() |
Bonjour,
si je devais régulièrement faire ce genre d'opération j'utiliserait une table partitionnée pour faire le travail. Imaginons que la table sur laquelle vous travaillez s'appelle source. Je commencerait par créer définitivement une table travail contenat une seule partition et de même structure que source. En supposant que ID est la clé primaire de source: Code :
1°) Alimentation de la table de travail à partir des lignes de sources que l'on souhaite garder. Code :
Code :
Code :
|
||||||||
|
10
|
|
|
#6 |
|
Membre confirmé
![]() Ahmed AANGOURDBA Etudes Oracle Inscription : janvier 2010 Messages : 123 ![]() |
Il y'a plusieurs manières d'améliorer des DELETE+INSERT.
il faut les étudier et les tester car ils dépendent de votre requête et des problématiques de votre application. Les solutions à étudier qui me viennent à l'esprit sont: - le partitioning - le parallélisme - le DIRECT PATH INSERT (via le hint APPEND) - l'insert en mode bulk
__________________
Mon blog Oracle: http://ahmedaangour.blogspot.com/ |
|
10
|
|
|
#7 |
![]() ![]() |
En plus de ce qui a été dit, j'ajouterai que si la table ne subit jamais de mise à jour, vous pouvez positionner votre PCTFREE à 0.
En fait l'idée développée par ojo77, c'est que lorsqu'on atteint un certain volume de suppressions à effectuer, la meilleur solution c'est justement de ne pas en faire. Une autre solution serait, si vous conservez une année glissante dans votre table, de regarder du côté du partitionnement (à la semaine, au mois, à étudier selon vos données) afin de faire des truncates partitions (très rapides) combinés aux insert append. Avec des index locaux vous n'aurez pas à les recréer. Vous pouvez également compresser votre table (en 10g cela se limite aux chargement direct load il me semble): le chargement sera peut-être un peu plus long (d'un petit facteur), mais au final vous utiliserez moins de blocs de données ce qui accélérera les lectures : comme il s'agit d'un datawarehouse ou datamart, c'est toujours une bonne chose.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : septembre 2006 Messages : 65 ![]() |
Bonjour à tous,
Un grand MERCI pour toutes ces réponses. ![]() Mon unique question en rapport aux solutions que vous soumettez, est-ce qu'elles sont compatibles avec Oracle Standard Edition? Il me semble, et j'espère me tromper, que le parallélisme et le "partionning" ne sont valable que pour Oracle Enterprise Edition, non? Dans l'attente de votre confirmation ou infirmation, je testerai les solutions "DIRECT PATH INSERT" et l'insertion en mode "bulk". Encore merci pour ce panel de solution. Salutations à tous. |
|
|
00
|
|
|
#9 |
|
Membre chevronné
![]() O. JolySupport Inscription : décembre 2010 Messages : 287 ![]() |
En effet en SE pas de partitionning, on peut remplacer l'échande de partition par le renomage de tables mais c'est moins propre
|
|
00
|
Copyright © 2000-2012 - www.developpez.com