2011-11-28 11 views

Odpowiedz

3

Można bezpośrednio wyszukiwać tabele AWR, co może być najprostszym sposobem.

Inną prostą techniką, którą stosowałem w Oracle 8i bez włączonych statystyk, było wybranie SQL z najwyższym stosunkiem buforowania do wykonania z v $ sql. Można grać z tego zapytania, aby wyszukać tylko wysoki wykonania kwerend zliczania, lub tych, robi dużą fizycznej IO itp

AWR i popiół tabel daje lepszy dostęp do informacji, ale może to być prosty Pierwszy krok:

select a.sql_id, a.ratio, a.executions 
from 
(
    select sql_id, buffer_gets/executions ratio, executions 
    from v$sql 
    where executions > 10 
    order by 2 desc 
) a 
where rownum <= 10 
+0

Thx do powtórki. Czy możesz mi pokazać, jakie zapytanie muszę użyć, aby uzyskać dane z AWR? Najdroższe instrukcje sql .. Jak na tym obrazku: http://docs.oracle.com/cd/B19306_01/server.102/b28051/tdppt_sqlid.htm#BABECDJG? BTW. Co powiesz na widok v $ sqlarea? – Marshall

+0

Wiele z tych statystyk w czasie rzeczywistym pochodzi z tabel ASH. Jeśli chcesz uruchomić menedżera przedsiębiorstwa, możesz wyśledzić jego sesję i sprawdzić, jakie SQL'y wykonują, aby wygenerować te wykresy. Zajrzyj do v $ active_session_history i zobacz, co możesz wymyślić. –

1

Aby szybko znaleźć, jeśli masz długie procesy zachodzące swoje zasoby działa spojrzeć na v $ sesson_long_ops:

SELECT * FROM v$session_longops 

patrz: http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2092.htm

Radziłbym Ci spojrzeć na to zbyt: http://docs.oracle.com/cd/B28359_01/server.111/b28274/instance_tune.htm

Następnie można wziąć SID znaleźć sql, który jest uruchomiony:

SELECT sql_text FROM v$session s 
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address 
WHERE sid=&sid 

Jeśli używasz systemu UNIX Można również spojrzeć pod komendą top (top10 lub topas na różnych smakach unixowych) można następnie użyć identyfikatorów procesowych zapytań zużywających najwięcej cpu, a następnie użyć następującego polecenia, aby uzyskać szkodliwy sql.

SELECT 
    s.username, 
    sa.sql_text 
FROM v$process p 
INNER JOIN v$session s ON p.addr=s.paddr 
LEFT JOIN v$sqlarea sa ON s.sql_hash_value=sa.hash_value AND s.sql_address=sa.address 
WHERE s.username IS NOT NULL AND p.spid=&SPID