Jak znaleźć najnowsze instrukcje SQL w bazie danych?

25

Lubię uzyskiwać najnowsze wykonane instrukcje w mojej bazie danych wraz ze wskaźnikami wydajności.

Jako taki, chcę wiedzieć, które instrukcje SQL najbardziej obciążają procesor / dysk.

Sebastian Roth
źródło

Odpowiedzi:

17

Oto instrukcja SQL do wykonania zadania. Otwarty na proces.

Krok 1: Określ identyfikatory instalacji i identyfikatory użytkowników.

SELECT inst_id,sid FROM gv$session WHERE username='<ENTER-USERNAME>';

Krok 2:

SELECT 
      s.sid
     ,s.CLIENT_INFO
     ,s.MACHINE
     ,s.PROGRAM
     ,s.TYPE
     ,s.logon_time
     ,s.osuser
     ,sq.sorts
     ,sq.DISK_READS
     ,sq.BUFFER_GETS
     ,sq.ROWS_PROCESSED
     ,sq.SQLTYPE
     ,sq.SQL_TEXT
 FROM gv$session s    
    , gv$sql sq
WHERE s.SQL_HASH_VALUE = sq.HASH_VALUE
  AND s.inst_id = :inst_id -- replace with instID from above
  AND s.sid = :sid -- replace with ID from above
  AND sq.inst_id = s.inst_id

Może zostać zwróconych wiele identyfikatorów ID i instancji. Zatem to użytkownik decyduje, jak wykorzystać te dane w interfejsie internetowym itp.

Sebastian Roth
źródło
Tylko mała uwaga: Oracle obsługuje ( in... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
krupie,
1
„inst_id” oznacza identyfikator instancji, itd. nie oznacza to identyfikatora instalacji.
cud173
13

Konsola Oracles Enterprise Monitor pokazuje całe bogactwo informacji o tym, które zapytania SQL zajmują maksymalny procesor, wąskie gardła, najwyższą aktywność w bazie danych, blokuje SQLs i in.

W przypadku podejścia historycznego możesz użyć raportów AWR firmy Oracle, aby wskazać obszary dotyczące ciebie.

alternatywny tekst

wprowadź opis zdjęcia tutaj

Sathyajith Bhat
źródło
1
Z ciekawości - AWR jest narzędziem dostępnym dla wszystkich licencji Oracle i czy mogę go używać tylko z wiersza poleceń?
Sebastian Roth,
2
Przepraszam, że powinienem o tym wspomnieć - z tego co wiem, AWR wymaga osobnego licencjonowania - Oracle Tuning & Diagnostic Pack . Wolę korzystać z AWR z konsoli Enterprise Manager - otrzymałem przywilej (!) Korzystania z konsoli Enterprise Manager. Odkryłem również , że możesz używać SQL Developer do monitorowania SQL, ale to wymaga powyższego licencjonowania
Sathyajith Bhat
1
Oracle Enterprise Manager (OEM) jest bardzo miły. Możemy monitorować stan naszej bazy danych niemal w czasie rzeczywistym dzięki automatycznie odświeżanym wykresom. Mamy duży monitor zawieszony na ścianie, pokazujący OEM dla naszych głównych baz danych 24x7 i jest niezwykle przydatny w identyfikowaniu problemów w miarę ich pojawiania się.
ScottCher,
4

Możesz również użyć V$SQL, istnieje kilka interesujących kolumn RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXTitp.

Dałoby to 10 najważniejszych instrukcji według odczytu dysku (uwaga - jest to kumulacja dla wszystkich wykonań):

select sql_id,child_number from
(
select sql_id,child_number from v$sql
order by disk_reads desc
)
where rownum<11

Jeśli instrukcja jest nadal dostępna V$SQL_PLAN, możesz uzyskać rzeczywisty plan wyjaśniania dla zapytania:

select * from table(dbms_xplan.display_cursor('sql_id',child_number));

Lubię też używać, V$SQL_PLANponieważ zawiera dobre informacje. Jeśli statistics_level=ALLmożesz użyć V$SQL_PLAN_STATISTICS.

gabrielp
źródło
2

W przypadku ostatniego kodu SQL:

select * from v$sql

Dla historii:

select * from dba_hist_sqltext
Grokster
źródło