Home > Bases de Datos, Oracle, Query > Detectar alto consumo de recursos

Detectar alto consumo de recursos

En mas de una ocación nos hemos encontrado que un servidor está con problemas de recursos y no podemos detectar que sessiones o que aplicaciones nos están causando el encolamiento. Para eso dejo aca unos script..

1.- Esta opción es util cuando uno detecta o presiente un excesivo uso de recursos por parte de una session o de una aplicación. Esto se puede detectar ya sea mirando con herramientas de de sistema operativo quien consume mas recursos. Y despues ejecutar la siguiente query.

Este script se utiliza en Unix/Linux y para obtener el PID que esta consumiendo mas CPU se debe utilizar el utilitario TOP


column "SID,SERIAL" format a10
column username format a12
column program format a30
column status format a10
select s.username,
s.sid||','||s.serial# "SID,SERIAL",
s.process "Client",
p.spid "Server",
p.program,
s.program,
s.status,
s.sql_address,
s.sql_hash_value
from v$process p,
v$session s
where p.spid= '&1'
and s.paddr = p.addr
order by status
/

En donde &1 corresponde al pid del proceso unix que es consumidor de recursos.

2.- Otra forma alternativa, es correr las siguientes querys:


column value format 999,999,999
set pause on
set linesize 132
set pagesize 10
select substr(name,1,30) parametro,
ss.username||'('||substr(se.sid,1,5)||') ' usuario,value,ss.program
from v$session ss,v$sesstat se,v$statname sn
where se.statistic# = sn.statistic#
and name like '%CPU used by this session%'
and se.sid=ss.sid
order by substr(name,1,25), value desc
/

para obtener los procesos que consumen mayor cantidad de CPU (Se debe tener habilitados el parametro TIMED_STATISTICS = TRUE en la BD) O bien:

column "Average" format 999,999,999.99
column "Respuesta" format 999,999,999.99
set pause on
ttitle "Sentencias con mayor numero de lecturas a Disco"
select sql_text,disk_reads,executions,disk_reads/decode(executions,0,1,executions) "Average",
'Tiempo resp=',disk_reads/decode(executions,0,1,executions) /50 "Respuesta"
from v$sqlarea
where disk_reads/decode(executions,0,1,executions) > 200
order by 4 desc
/

o sino de otra manera

select ses.username "User",ses.sid "Sid",ses.serial# "Ser#",ses.process "pid",ses.program "Program",sio.physical_reads "Accesos"
from v$session ses, v$sess_io sio
where ses.sid = sio.sid
and nvl(ses.username,'SYS') not in ( 'SYS','SYSTEM')
order by 6 desc
/

  1. No comments yet.
  1. No trackbacks yet.