Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment collecter les données de la partition INMEMORY ?

Le processus IMCO (Inmemory Coordinator) se réveille toutes les deux minutes et vérifie si des tâches de population doivent être effectuées. Ainsi, interroger une table immédiatement après l'avoir activée pour la mémoire ne garantit pas que la requête sera servie à partir de la mémoire.

Les objets sont renseignés dans le magasin de colonnes IM soit dans une liste prioritaire immédiatement après l'ouverture de la base de données, soit après que les tables ont été analysées (interrogées) pour la première fois.

Par exemple, si nous activons la table tab1, tab2, tab3 pour inmemory :

alter table tab1 inmemory priority medium;
alter table tab3 inmemory priority high;
alter table tab2 inmemory priority critical;

Ces tables entrent en mémoire lorsque :

  1. Le processus IMCO récupère ces tableaux et les charge dans la zone de mémoire (dans l'ordre de priorité le plus élevé au plus bas :tab2, tab3 et tab1)
  2. Si nous effectuons une requête de sélection sur l'une des tables (exemple :select * from tab1 ) avant le début du processus IMCO (toutes les 2 minutes)

Pour savoir si une table/partition est complètement chargée en mémoire, vous pouvez interroger v$im_segments afficher comme suit :

select owner, segment_name, partition_name, segment_type, bytes, 
bytes_not_populated, populate_status from v$im_segments;

Donc, pour répondre à votre question :

  1. Assurez-vous que la table est chargée en mémoire en interrogeant v$im_segments
  2. Si la table n'est pas chargée, effectuez une requête de sélection dessus pour la charger dans la zone de mémoire
  3. Obtenez le plan de requête pour la requête de sélection sur la table, il devrait afficher INMEMORY dans le cadre du plan

Consultez ce livre blanc pour plus de détails.