|
|
White Paper Fliquer
le contenu de db_block_buffers
Qu'est ce qui se passe dans la
SGA depuis le début de ma production ? Qui occupe la mémoire ? Quelles
tables ? Avec quelle fréquence ?
Le bout de code suivant propose une méthode de suivi
du contenu des blocs de données dans la SGA. Elle consiste dans
l'obtention régulièrement de la liste des objets présents la-bas.
J'utilise pour ceci une table qui stocke les résultats intermédiaires,
qui peuvent être utilisés pour inférer l'utilisation des objets, de la
mémoire, son taux de remplissage, etc. C'est un petit outil efficace.
set pages 60 heading on echo on
drop table anp.bufferuse; /* table qui stocke les résultats, une ligne
par objet pour le moment du suivi */
create table anp.bufferuse as
select sysdate dt, a.obj, a.state, count(*) TOTAL
from x$bh a
group by a.obj, a.state;
select * from anp.bufferuse; /* pour voir */
set echo on
drop procedure sample_buffer;
create procedure sample_buffer
(duration number, -- durée du test en minutes
sleep_time number -- attente entre mesures, secondes
)
is
time_so_far number;
dt date;
begin
time_so_far := 0;
-- loop until time runs out
dbms_output.enable (1000000);
while (time_so_far < duration * 60) loop
select sysdate into dt from dual;
insert into anp.bufferuse
select dt, a.obj, a.state, count(*)
from x$bh a, obj$ b
where b.owner# > 2 and a.obj = b.obj#
group by a.obj, a.state;
commit;
dbms_lock.sleep(sleep_time); -- attente
time_so_far := time_so_far + sleep_time;
end loop;
end;
/
execute sample_buffer(12,60);
/*
|| Exécuter ceci dans une session pirat ! L'idéal serait de le
|| faire par un db_link.
|| exécuter un suivi de ce qui se passe avec les buffers
|| pendant 12 minutes, avec prise de mésures une fois par
|| minute. Idée du code pompée dans catio.sql (bouguée).
|| dans rdbms/admin/ Radu Caulea, 2000
*/
|