Bonjour,
je continue avec mes demandes d'optimisation.
J'aimerais optimiser un script de purge. tous les jours, les engistrements de plus de 65 jours de mes tables de faits sont purgés. Or cette purge est extrémement longue, environ 1 million d'enregistrements supprimés par heure.
Volumétrie de la table : 45 millions d'enregistremnts
Index de la table :
(ma notation pour les index table(col[,col]))
* int_navigation(id_usage, id_session, tps_id, num_ordre_session) (ma clé primaire)
* int_navigation(id_interne_ei)
* int_navigation(id_interne_struct_liaison)
* int_navigation(tps_id,id_session)
* int_navigation(id_session)
Voici le bout de procédure pl/sql que j'utilise. C'est tout simplement une boucle qui supprimer 100 000 enregistrements à la fois afin d'éviter de faire exploser mon RBS.
L'ajout d'un index sur la colone TPS_ID n'apporte aucun gain de performance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Loop delete from INT_NAVIGATION where TPS_ID < to_char(sysdate -65,'YYYYMMDD') and rownum <100000; exit when SQL%NOTFOUND; commit; end loop;
J'ai essayé de dropper les index de la table et de les recréer ensuite, mais la reconstruction des index dure environ une heure, en sachant que je supprime 2million d'enregistrements en une heure quand les index sont droppés.
A noter également que je ne dispose pas d'assez d'espace disque sur mon serveur de prod pour passer par une table temporaire.
J'aimerais donc savoir comment optimiser ceci ?
Merci d'avance
Nico
Partager