Parmis les quelques milliers de requêtes qui sont executées chaque jour sur notre base de données (oracle 8.0.5), une seule me pose de réels soucis.
> Chaque jour, une requête insert (environ 16000 lignes, 23 colonnes, 10 Mo) dans une table temporaire. Cette insertion, somme toute légère, est extrèmement longue et peut durer plusieurs heures alors que la requête qui l'alimente prend, au plus, quelques minutes.
> La table cible est préalablement vidée (truncate ou delete, j'ai essayé les deux), et les segments rollbacks sont largement suffisant pour supporter les données de cette transaction. La table est construite avec les options suivantes :NOLOGGING,NOCACHE,NOPARALLEL
> Aucune autre requête n'est susceptible de verrouiller cette table puisque elle n'est utilisée que dans ce traitement et que, par ailleurs , c'est l'un des premiers traitement à être lancé, la nuit, après le redémarrage de nos bases.
> J'ajoute que le poids des index est réduit : une clé primaire et un index sur trois colonnes chacun (les mêmes mais dans un ordre différent)
> Le seul moyen que j'ai cru trouver pour limiter le temps d'execution est de procéder à un rebuild de la table et des index. Je ne suis pas sûr cependant que ce ne soit pas dû à un heureux concours de circonstance et que mon rebuild ne soit aussi efficace qu'un rituel vaudoux.
Qu'est-ce qui, selon vous, pourrait ralentir à ce point une commande insert ?








Répondre avec citation
Partager