Bonjour
oracle 9.2.0.3 / Unix Solaris
Est ce possible de mettre une table existante en mémoire et comment faire
pour qu'elle soit prise en compte lors du démarrage de l'instance
Merci d'avance
Bonjour
oracle 9.2.0.3 / Unix Solaris
Est ce possible de mettre une table existante en mémoire et comment faire
pour qu'elle soit prise en compte lors du démarrage de l'instance
Merci d'avance
Oui, en la "keepant" dans la SGA.
http://oracle.developpez.com/guide/a...es/?page=Chap4
http://download-uk.oracle.com/docs/c...o2.htm#1000571
Envoyé par Fred_D
Merci pour votre réponse rapide
Prenons un exemple la table existante emp du schéma scott
Pour la passer en mémoire il faut faire :
ALTER TABLE SCOTT.EMP CACHE;
et pour qu'elle reste au prochain démarrage :
lancer sous $ORACLE_HOME/rdbms/admin/dbmspool.sql pour créer le package ensuite :
BEGIN
SYS.DBMS_SHARED_POOL.KEEP (' scott.emp’);
END;
/
merci de valider
Ca ne peut pas mettre les données de la table en cache que l'instance soit démarrée ou pour le prochain démarrage. Cette procédure ne concerne que le shared pool qui ne contient que des objets liés directement aux requêtes et au code PL/SQL et non des données. Le shared pool n'est pas le buffer cacheBEGIN
SYS.DBMS_SHARED_POOL.KEEP (' scott.emp’);
END;
/Peut-être que cela permet de mettre la définition de la table en cache la documentation n'est pas claire à ce niveau.
There are two kinds of objects:
* PL/SQL objects, triggers, sequences, and types which are specified by name
* SQL cursor objects which are specified by a two-part number (indicating a location in the shared pool).
For example:
DBMS_SHARED_POOL.KEEP('scott.hispackage')
je vais oublier l'histoire du DBMS_SHARED_POOL.KEEP
et tout simplement programmer un job au démarrage qui exécute un :
ALTER TABLE nomtable CACHE ;
mais bien sûr cela n'est qu'un souhait, rien ne garantit qu'une table cache soit dans le cache... Oracle va seulement essayer de la garder en cache le plus longtemps possibleEnvoyé par Fakhry
[edition]
et le alter table nomtable cache ne met rien en cache, ce DDL n'est à exécuter qu'une fois. Ensuite, les données sélectionnées seront si possible gardées en cache.
Regarde aussi le BUFFER_POOL KEEP, qui est plus puissant que Cache, mais qui a aussi ses limites (bloc standards, sga_target, mémoire "gaspillée", etc...)
ALors pour mettre une table en cache , il suffit tout simplement de faire un
Sinon tu peux créer dans ta cache deux types de caches en plus de ton DATA BUFFER :
Code : Sélectionner tout - Visualiser dans une fenêtre à part select * from ...
Le recycle
Le Keep
Pour pouvoir les mettre en cache au démarrage voici les requêtes :
Dans la partie storage de la table
Pour définir ces buffer dans le fichier d'initialisation :
Comment déterminer les tables candidates au buffer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 BUFFER_POOL_KEEP BUFFER_POOL_RECYCLE
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT obj object, COUNT(1) buffers, AVG(tch) avg_touches FROM x$bh WHERE lru_flag = 8 GROUP BY obj HAVING AVG(tch) > 5 AND COUNT(1) > 20;
Partager