La gestion des plans d'exécution en cache - LRU/MRU

Dans une application informatique, la plupart des traitements sont exécutés plusieurs fois dans la même journée. Dans le cas de traitement OLTP, ceux-ci peuvent devenir très nombreux à la valeur de recherche près. C'est pour cette raison que l'on préconise l'utilisation de bind variables, afin que le plan d'exécution ne soit pas recalculés à chaque exécution. Mais alors, dans le cas d'un grand nombre de requêtes différentes, comment Oracle différencie-t-il les requêtes les plus utilisées des autres ?
Le SGBD utilise pour cela un algorithme de type LRU (ou MRU, selon que le verre à moitié vide est aussi le verre à moitié plein) :
Lorsqu'une requête est exécutée, il regarde si son plan est dans la liste.
- oui, le plan (représenté par une valeur de hash) avance dans la liste d'une position (jusqu'à arriver en position de most recently used)
- non, il est inséré au milieu de la liste, décalant vers la zone least recently used la moitié des plans.
Dans le cas où la liste est pleine, le plan LRU déborde, il est ainsi enlevé du cache.




Exemple de LRU où seront successivement utilisés les plans 0, 0, 13, 2, 2


Voir aussi :
LRU sur wikipédia




Vous n'avez pas trouver réponse à votre question ? Préciser votre recherche :

Catégories