Vidage de cache

Lors de test de performance sur une injection d'un gros volume de données, on a souvent besoin d'estimer le temps de traitement ; cependant le jeu de données ne correspond pas à la réalité, il faut alors boucler sur ce jeu.
Or, oracle met en cache (au sein de la sga) un certain nombre de données afin d'y accéder plus rapidement. Il faut alors vider ce cache entre chaque itération.

Deux commandes existent pour celà ; avant Oracle 10g, il faut vider complètement la shared pool (mémoire cache partagée : données, plan d'exécution, bibliothèque, dictionnaire)

ALTER SYSTEM FLUSH SHARED_POOL

A partir de 10g il est possible de ne vider que le cache des données (ce qui nous intéresse plus) :

ALTER SYSTEM FLUSH BUFFER_CACHE;

Si le but est d'injecter 1000000 de lignes dans t2 par paquets de 1000, voici une possibilité à partir d'un jeu de 1000 lignes stocké dans t1 :

begin
for i in 0..999 loop
insert into t2 select (id+(1000*i), col2, col3, col4 from t1;
commit;
execute immediate 'ALTER SYSTEM FLUSH BUFFER_CACHE';
end loop;
end;
/


Voir également :
- la modification d'un paramètre plus généralement
- la montée en cache d'une table




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

Catégories