Antes de responder, dica : NÃO deixe de fazer também a checagem de 
processos consumidores de CPU pelo Sistema Operacional também, pois 
nesse caso até mesmo um eventual processo não-Oracle  que esteja 
interferindo vc pega... Detalhe, única coisa é que no win as conexões 
no bd Oracle são threads dum único processo oracle.exe, e na sua 
infinita sabedoria a m$ não disponibiliza (ao menos até nas versões 
que usei) uma tool pra listar consumo de CPU por threads, vc TEM que 
instalar/baixar alguma, uma conhecida é a PsList em 
http://www.sysinternals.com/ProcessesAndThreadsUtilities.html . 
Sabendo-se o pid, aí basta se consultar via query tipo :

select p.spid,  s.sid, s.serial#, s.program, s.machine, s.logon_time
  from sys.v_$process p, sys.v_$session s
 where s.paddr = p.addr
   and p.spid   in (listaseparadaporvírguladospids);
   
que vc relaciona o pid do SO com a sessão Oracle.

Agora sim respondendo pra fazer dentro do banco : infos do tipo ficam 
registradas na v$sesstat (enquanto a sessão não disconectar!!), a 
consulta poderia ser algo tipo :

select p.spid PID, 
       s.sid, 
       s.username,
    decode(nvl(p.background,0),1,bg.description,
         s.program ) program,
    ss.value/100 "CPU (segs)",
    physical_reads "disk_io (Blks)"
 from v$process p,
    v$session s,
    v$sesstat ss,
    v$sess_io si,
    v$bgprocess bg
 where s.paddr=p.addr
  and ss.sid=s.sid
  and ss.statistic#=12
  and si.sid=s.sid
  and bg.paddr(+)=p.addr
 order by 5 desc;
 
 Execute várias vezes esse script, com breves intervalos entre cada 
execução, é isso... Talvez vc queira guardar os resultados num 
arquivo (via SPOOL), ou alterar pra guradra os result numa tabela 
sua, aí é com vc.
 
==> Note apenas que há duas maneiras de se queimar CPU num dado 
sistema : ou a sessão está pedindo operações complexas que usam 
montes de CPU, ou (o caso mais sutil) a sessão está fazendo operações 
simples, que requerem pouco, MAS está fazendo um monte louco delas, 
tipo, pede uma pequena agora, depois outra pequena daqui a pouquinho, 
depois outra, outra.... Esse segundo caso normalmente NÃO aparece em 
análises do TOP-cpu, pra "pegar" esse segundo caso vc teria que 
executar o script várias e várias vezes MAS analisar não os números 
de CPU gasta, mas sim QUANTAS vezes uma sessão pediu por CPU e 
portanto o número aumentou, as sessões que constantemente pedem por 
CPU são suspeitas de caso 2...

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, "am_balielo" 
<[EMAIL PROTECTED]> escreveu
>
> Bom dia
> 
>   Gostaria de saber como descobrir via sqlplus qual o usuario esta 
> utilizando mais processo, pois de vez em quando o servidor fica com 
o 
> uso de cpu em 100%.
>   Preciso montar um script p/ poder identificar qual o usuario e o 
que 
> ele está processando que leva o uso da CPU ficar em 100% vários 
minutos.
> 
>   Servidor Windows 2003 Server 1Gb de memória e banco de dados 
Oracle9i 
> (9.2.0.6).
> 
> 
>   Desde já muito obrigado.
>   Alessandro
>






--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__________________________________________________________________
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Reply via email to