!
!
!
!
!
!
!
!

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
*/


Copyright © 1998-2012 Radu Caulea, TAFORA MAJ 19/05/2012 !
Commentaires et suggestions radu[CHEZ]tafora.fr