Bonsoir,
nous travaillons sur un traitement d'import qui "doit" (c'est les clients qui exigent) se faire sur une base OLTP alors que ceux-ci continuent de travailler.
La base en question contient en fait les données de plusieurs opérateurs qui utilisent les mêmes applicatifs mais leurs données sont cloisonnées (pas de partitionnement mais une clé permet d'identifier les données propres à chacun).
Lorsqu'un opérateur lance un import de la base des contacts, nous sommes donc sensés faire du efface et remplace des données de celui-ci sans perturber les autres.
Le problème que je rencontre c'est que mon delete :
met une dizaine de minutes pour s'exécuter. Et du coup ce sont les 6 autres opérateurs qui en payent aussi les frais car plus personne ne peut travailler avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 delete from tab_contact where num_op=20;
=>L'opérateur 20 (num_op=20) occupe effectivement 40% des enregistrements de la table.
=> La table tab_contact est indexée sur le champ num_op mais pour la requête précédente c'est un full scan qui est fait (probablement du au fait que 40% des données doivent être couvertes...) : peut-on forcer l'utilisation de l'index et y aurait il u intérêt ? Ou doit on plutôt désactiver les index pendant l'opération?
=> On a peur de passer par un CTAS alors que des utilisateurs utilisent les mêmes tables .
Le nombre de lignes dans la table pour l'opérateur en question et de l'ordre de 100 000 lignes.
Ma question est donc de savoir comment optimiser cette suppression en limitant la gène dans le travail des utilisateurs connectés (quitte à locker les tables quelques secondes si nécessaire). Des idées ?
Partager