Jakie jest zapytanie, aby znaleźć nr. aktualnych otwartych kursorów w Oracle Instance?Jak znaleźć Current Open Cursors w Oracle
Co to jest dokładność/częstotliwość aktualizacji tych danych?
Używam Oracle 10gR2
Jakie jest zapytanie, aby znaleźć nr. aktualnych otwartych kursorów w Oracle Instance?Jak znaleźć Current Open Cursors w Oracle
Co to jest dokładność/częstotliwość aktualizacji tych danych?
Używam Oracle 10gR2
Wszystkich kursory otwarty przez sesji:
select a.value, s.username, s.sid, s.serial#
from v$sesstat a, v$statname b, v$session s
where a.statistic# = b.statistic# and s.sid=a.sid
and b.name = 'opened cursors current';
Źródło: http://www.orafaq.com/node/758
O ile wiem, zapytań na V $ poglądów są oparte na pseudo-tabel (tabele "x $"), które wskazują bezpośrednio odpowiednie części SGA, więc nie można uzyskać dokładniejszych informacji; oznacza to jednak, że jest to punkt-w-czasie (tj. "brudny odczyt").
Oto jak znaleźć otwarte kursory, które zostały przeanalizowane. Musisz być zalogowany jako użytkownik z dostępem do v $ open_cursor i v $ session.
COLUMN USER_NAME FORMAT A15
SELECT s.machine, oc.user_name, oc.sql_text, count(1)
FROM v$open_cursor oc, v$session s
WHERE oc.sid = s.sid
GROUP BY user_name, sql_text, machine
HAVING COUNT(1) > 2
ORDER BY count(1) DESC
;
Jeśli podaje część tekstu SQL, może być przydatna do identyfikowania nieszczelnych aplikacji. Jeśli kursor nie został przeanalizowany, nie pojawia się tutaj. Zauważ, że Oralce czasami będzie otwierać rzeczy dłużej niż Ty.
W rzeczywistości jest to złożona sytuacja. v $ open_cursor zdarza się wyświetlać instrukcje w pamięci podręcznej. Otwarte kursory (zasób, który można wbić, jeśli masz kursor/wyciek ResultSet) znajduje się w v $ sessstat w wierszu o nazwie "otwarty kursor prądu". –
@Ollie: Ale w jaki sposób pomaga to w identyfikacji wycieku instrukcji SQL? –
Ten wybór pokazuje rzeczywisty kod SQL, który otworzył kursory, idealne do debugowania! +1 ode mnie –
select sql_text, count(*) as "OPEN CURSORS", user_name from v$open_cursor
group by sql_text, user_name order by count(*) desc;
wydaje się działać dla mnie.
1) Identyfikator powinien mieć dostęp sys dba 2)
select sum(a.value) total_cur, avg(a.value) avg_cur, max(a.value) max_cur,
s.username, s.machine
from v$sesstat a, v$statname b, v$session s
where a.statistic# = b.statistic# and s.sid=a.sid
and b.name = 'opened cursors current'
group by s.username, s.machine
order by 1 desc;
Oracle ma stronę dotyczącą tego problemu z SQL i USTEREK sugestie.
"Rozwiązywanie problemów otwartych kwestii kursor" http://docs.oracle.com/cd/E40329_01/admin.1112/e27149/cursor.htm#OMADM5352
używam coś takiego:
select
user_name,
count(*) as "OPEN CURSORS"
from
v$open_cursor
group by
user_name;
Te 'otwarte kursory prąd' są leniwie reaped przez serwer tabeli Oracle; więc liczba, którą widzisz dla twojego zgłoszenia może być nienormalnie wysoka, bez znaczenia, że popełniłeś błąd. Zobacz http://www.orafaq.com/node/758 –