- Este tópico contém 7 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 7 meses atrás por
ramasine.
-
AutorPosts
-
26 de agosto de 2009 às 3:25 pm #89285
ramasine
ParticipanteCaros,
Estou montando uma rotina que captura de x em x tempos, sql pesados na base de dados:
SELECT a.DISK_READS/a.EXECUTIONS “DSK_RDS_EXE”, a.DISK_READS DISK_READS, a.USERS_OPENING USERSO, a.ROWS_PROCESSED ROWSP, a.EXECUTIONS EXECUTIONS,
— a.SQL_FULLTEXT SQL_TEXT — 10g
a.SQL_TEXT SQL_TEXT — 9i
— t.SQL_TEXT SQL_TEXT
FROM V$SQLAREA a, V$SQLTEXT t — V$SQLTEXT_WITH_NEWLINES t
WHERE a.HASH_VALUE=t.HASH_VALUE
AND a.DISK_READS > 100000
AND a.EXECUTIONS > 0
AND a.DISK_READS/a.EXECUTIONS > 2000
ORDER BY a.DISK_READS/a.EXECUTIONS DESC, t.HASH_VALUE, t.PIECEQueria trazer tb ou o program, ou o SID, do que está sendo executado, tentei mais alguns JOINS, mas sem sucesso..
Alguma sugestão?
O display da query é este:
DSK_RDS_EXE DISK_READS USERSO ROWSP EXECUTIONS SQL_TEXT
———— ———— —— ———— ———- ——————————————————————————–
218,784 218,784 0 1,194,490 1 select nca_num_seq,tca_num_seq,cam_ano_ini_cam from INC_CAL_APU_02 where cam_ano
_ini_cam =200626 de agosto de 2009 às 3:38 pm #89286Marcio68Almeida
ParticipanteBom dia…
O v$sqlarea “a” se une ao v$session “s” pela seguinte cláusula :
And s.sql_address = a.address
Você tem que tomar cuidado para que a sua consulta não comece a aparecer entre as mais custosas do banco…
Você pode utilizar a seguinte consulta :
Select s.address, s.last_load_time, s.first_load_time,
TO_CHAR ((s.cpu_time / s.executions) / 1000, '999,999,999.9999') tempo_cpu,
TO_CHAR ((s.elapsed_time / s.executions) / 1000, '999,999,999.9999') tempo_decorrido, s.executions,
p.object_owner, p.object_name, p.cost, p.cardinality, p.bytes, p.io_cost, p.filter_predicates,
w.active_time, w.estimated_optimal_size, w.last_memory_used, w.total_executions, w.active_time
From v$sql_plan p,
v$sql s,
v$sql_workarea w
Where p.address = s.address
And p.address = w.address (+)
And p.hash_value = w.hash_value (+)
And p.id = w.operation_id (+)
And p.options = 'FULL'
And p.object_owner not like '%SYS%'
And SUBSTR (last_load_time, 1, 10) = TO_CHAR (sysdate, 'yyyy-mm-dd')
-- And (p.cardinality > 100
-- or p.cost > 50)
And p.filter_predicates is not null
And s.executions > 1
And (s.elapsed_time / 1000) > 1
Order by tempo_decorrido desc --(cost + cardinality) desc
Essa consulta aliada a esta :
Select sql_text from v$sqltext where address = '9FF6A340' order by piece;
poderá te trazer boas informações…26 de agosto de 2009 às 4:25 pm #89290David Siqueira
ParticipanteMarcelo, veja se essa query aqui te ajuda:
select
sql_text,
username,
disk_reads_per_exec,
buffer_gets,
disk_reads,
parse_calls,
sorts,
executions,
rows_processed,
hit_ratio,
first_load_time,
sharable_mem,
persistent_mem,
runtime_mem,
cpu_time,
elapsed_time,
address,
hash_value
from
(select sql_text,
username,
round((a.disk_reads/decode(a.executions,0,1,a.executions)),2)disk_reads_per_exec,
a.disk_reads,
a.buffer_gets,
a.parse_calls,
a.sorts,
a.executions,
a.rows_processed,
100 - round(100*a.disk_reads/greatest(a.buffer_gets,1),2) hit_ratio,
a.first_load_time,
sharable_mem,
persistent_mem,
runtime_mem,
cpu_time,
elapsed_time,
address,
hash_value
from
v$sqlarea a,
all_users b
where
a.parsing_user_id=b.user_id
and
b.username not in ('SYS','SYSTEM')
order by 3 desc)
where rownum < 21;Abraço!!!
26 de agosto de 2009 às 4:52 pm #89292ramasine
ParticipanteValeu mesmo David e Márcio!!
Já estou finalizando o processo!!26 de agosto de 2009 às 9:46 pm #89307vieri
Participanteqdo terminar posta os scripts ai ramasine..
[]s
27 de agosto de 2009 às 2:21 am #89326ramasine
ParticipanteClaro meu velho!!!
To montando a shell, e terminando coloco aqui!!27 de agosto de 2009 às 9:13 am #89334Ricardo Portilho Proni
ParticipanteOi Ramasine !
Algo muito parecido já existe e está pronto no Oracle.
SPREPORT para =10g.Conhece? Atende?
Abraço !
27 de agosto de 2009 às 11:38 am #89336ramasine
ParticipanteGrande Ricardo, The Certified Men !! 🙂
Sim, se for o Statspack que fala sim, já coleto diariamente..tb! -
AutorPosts
- Você deve fazer login para responder a este tópico.