Juste pour ma curiosité puisque je ne suis pas un grand expert Oracle mais c'est quoi la différence avec le "Row cache" ?
Version imprimable
Juste pour ma curiosité puisque je ne suis pas un grand expert Oracle mais c'est quoi la différence avec le "Row cache" ?
Bonjour,
Le 'row cache' cache des lignes un peu comme une table de hachage clé->valeur. C'est une techno d'il y a au moins 20 ans.
Le storage In-Memory qui va sortir stocke des colonnes, dans le but de les scanner rapidement avec des opérations CPU qui travaillent sur des vecteurs de données.
Il n'y a pas vraiment de point communs. In-Memory n'est pas un cache d'ailleurs. C'est un stockage redondant.
On ne peut pas encore trop parler de l'option In-Memory car elle est encore en beta. Elle devrait sortir d'ici quelques jours. Voici ce que j'avais écrit dessus avant d'avoir la beta: http://www.dbi-services.com/index.ph...ting-for-12102 (in english...)
Cordialement,
Franck.
Merci pour cet article, je prends beaucoup mieux ;-)
Effectivement le stockage en colonne est très important. Je ne pensais pas qu'il ferait un retour arrière sur le "fixed size" qui était pour moi l'élément le plus déterminant pour optimiser les accès (l'âge d'or des fichiers séquentiels indexés).
Disons que le cache c'est une structure dont on a besoin de toute façon pour accéder aux données, mais qu'on garde un peu plus longtemps que nécessaire au cas où on ait besoin d'accéder aux même données peu de temps après. Par exemple, pour lire un bloc d'un datafile, et encore plus pour le mettre à jour, il faudra de toute façon un buffer. Le buffer cache, c'est seulement le fait que ces buffers sont partagés et gardés même lorsque l'écriture sur disque est faite.
Par contre, l'option In-Memory c'est un stockage supplémentaire, dont la mise à jour se fait en parallèle. C'est un nouveau segment, redondant car il peut être reconstruit à partir de la table, un peu comme un index ou une vue matérialisée. Sauf qu'il est en mémoire, et qu'il a un format 'colonne'. Ca ressemble plus à de la réplication qu'à un cache. et l'optimiseur choisit d'aller lire l'un ou l'autre.
Alors qu'avec le buffer cache, l'optimiseur n'a pas le choix. Il y aura toujours un buffer get, qu'il faille faire un disk read ou non pour alimenter ce buffer.