trace_waits.sql

----------------------------------
-- SCRIPT  trace_waits.sql
-- INICO DO SCRIPT 
-- ALEXANDRE PIRES 14/05/2012
----------------------------------
-------------------------------------------------------------------------------
--
-- Script:	trace_waits.sql
-- Purpose:	to trace sessions waiting for a resource
--
--
-------------------------------------------------------------------------------

-- SQL> @trace_waits
-- 
-- This script uses event 10046, level 8 to trace the event waits in
-- the top N sessions affected by waits for a particular resource.
-- 
-- Select sessions waiting for: buffer busy waits
-- Number of sessions to trace: 5
-- Seconds to leave tracing on: 900
-- 
-- Tracing ... Please wait ...
-- 
-- PL/SQL procedure successfully completed.
--  
-- SQL> exit
-- $ cd udump
-- $ grep 'buffer busy waits' ora_*.trc |
-- > sed -e 's/.*p1=/  file /' -e 's/ p2=/  block /' -e 's/ p3.*//' |
-- > sort |
-- > uniq -c |
-- > sort -nr |
-- > head -5
--   42    file 2    block 1036
--   12    file 24   block 3
--   10    file 2    block 1252
--    7    file 2    block 112
--    6    file 7    block 5122
-- $


@save_sqlplus_settings

prompt
prompt This script uses event 10046, level 8 to trace the event waits in
prompt the top N sessions affected by waits for a particular resource.
prompt
@accept Wait     "Select sessions waiting for" "buffer busy waits"
@accept Sessions "Number of sessions to trace" 5
@accept Sleep    "Seconds to leave tracing on" 300
prompt
prompt Tracing ... Please wait ...
set verify off
set serveroutput on

declare
  type sid_type is table of number index by binary_integer;
  type serial_type is table of number index by binary_integer;
  cursor waiters is
    select
      e.sid,
      s.serial#
    from
      sys.v_$session_event  e,
      sys.v_$session  s
    where
      e.event = '&Wait' and
      s.sid = e.sid
    order by
      total_waits desc;
  sid sid_type;
  serial serial_type;
  n binary_integer := 0;
begin
  open waiters;
  loop
    n := n + 1;
    exit when n = &Sessions + 1;
    fetch waiters into sid(n), serial(n);
    exit when waiters%notfound;   
    sys.dbms_system.set_ev(sid(n), serial(n), 10046, 8, '');
  end loop;
  if n > 1 then
    sys.dbms_lock.sleep(&Sleep);
    loop
      n := n - 1;
      exit when n = 0;
      sys.dbms_system.set_ev(sid(n), serial(n), 10046, 0, '');
    end loop;
  else
    sys.dbms_output.put_line('No sessions to trace.');
  end if;
end;   
/

undefine Wait
undefine Sessions
undefine Sleep

@restore_sqlplus_settings
----------------------------------
-- FIM DO SCRIPT  -- 

Sobre Alexandre Pires

ORACLE OCS Goldengate Specialist, OCE RAC 10g R2, OCP 12C, 11g, 10g , 9i e 8i - Mais de 25 anos de experiência na área de TI. Participei de projetos na G&P alocado na TOK STOK, EDINFOR alocado na TV CIDADE "NET", 3CON Alocado no PÃO DE AÇUCAR, DISCOVER alocado na VIVO, BANCO IBI e TIVIT, SPC BRASIL, UOLDIVEO alocado no CARREFOUR e atualmente na ORACLE ACS atendendo os seguintes projetos: VIVO, CLARO, TIM, CIELO, CAIXA SEGUROS, MAPFRE, PORTO SEGURO, SULAMERICA, BRADESCO SEGUROS, BANCO BRADESCO, BASA, SANTANDER, CNJ, TSE, ELETROPAULO, EDP, SKY, NATURA, ODEBRESHT, NISSEI, SICREDI, CELEPAR, TAM, TIVIT, IBM, SMILES, CELEPAR, SERPRO,OKI,BANCO PAN, etc
Esse post foi publicado em ORACLE 11gR2, PLSQL SCRIPTS, PLSQL TUNING e marcado , , . Guardar link permanente.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s