Bonjour,
Je travaille sur oracle 8i sous windows 2003 server.
A titre indicatif cette machinne est un xeon 3,2Ghz avec 1Go de RAM DDR2 et 2 disque dur SATA2 en raid 0.
j'ai une relation en 1,N entre 2 tables
Ces 3 champs sont indéxés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 TableA -CLETABLEA TABLEB -CLETABLEB -CLETABLEA
Suite à un soucis avec le logiciel attaquant cette base, je dois supprimer toutes le données de la TableB qui n'ont aucun enregistrement liés à un enregistrement de la table A donc la requete est :
Mais, chaque table fait environ 1 900 000 enregistrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 DELETE TABLEB WHERE TABLEB.CLETABLEA NOT IN(SELECT CLETABLEA FROM TABLEA); commit;
J'ai lancé cette requête vendredi et ce matin l'instance manager me dit que le temps écoulé et de 69H et que le temps restant estimé est de 269H
Vous comprendrez que ça fait un peu trop long pour moi.
Je cherche donc à optimiser le temps de traitement sur cette requete.
La première chose étrange est que sur mon serveur seulement 15/20% du cpu est utilisé... comment faire pour utiliser 100% du cpu ? Pareil pour la mémoire alors que cette machine est dédié à la réparation de la base...
Je n'ai pourtant mis aucune limitation sur l'utilisation des ressources système de mes profils(tout a été laissé par défaut).
La deuxième chose est que sqlplus utilise systèmatiquement une transaction lorsqu'on veut éxécuter une requete. Je pense que ça ralentit beaucoup les performances, comment ne pas utiliser le mode transactionnel dans une requete sous sqlplus ?
Voilà, j'attends vos conseils avisés
Partager