Bonjour,
Peut-on créer un index alors que les utilisateurs font des mises à jour sur la table cible ?
Je suppose que cela peut engendrer des ralentissements. Des locks aussi ?
Merci d'avance pour les réponses.
Bonjour,
Peut-on créer un index alors que les utilisateurs font des mises à jour sur la table cible ?
Je suppose que cela peut engendrer des ralentissements. Des locks aussi ?
Merci d'avance pour les réponses.
Oui, on peut.
Pas de ralentissements. Pas de lock.
A bon!!!
Lorsqu'on créé un index en ligne dans un environnement OTLP, oracle fait un "lock" sur la table au début de la création de l'index et un "lock" de la table à la fin de cette création afin de "merger'' les clés d'index créées entre temps.
Donc, si une transaction est active au moment de la création de l'index, la création de cet index va être bloquée jusqu'au moment où la transaction sur la table soit finie; puis c'est au tour de la création de l'index de faire un "lock" sur la table pour un petit moment avant de libérer ce "lock". Le même processus peut avoir lieu à la fin de la création de l'index lorsque celui-ci voudra finir son traitement par un dernier petit "lock" de la table.
Le problème est que, avant la release 11g, toute autre transaction qui arrive sur la table et qui trouve que la création de l'index est en train d'attendre la fin d'une autre transaction sur cette table (transaction commencée avant le début-ou la fin- de la création de l'index), va être bloquée jusqu'à ce que le processus de la création de l'index acquière son "lock" et le libère.
Ce problème a été néanmoins supprimé à partir de la release 11g.
Le "lock" au début et à la fin de la création de l'index subsiste toujours si évidemment une transaction sur la table est active à ces deux moments précis; par contre, d'autres transactions sur la table ne seront plus bloquées par le blocage de l'index lui même.
Partager