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.
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.
Odpowiedzi:
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.
in
... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
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.
Możesz również użyć V$SQL
, istnieje kilka interesujących kolumn RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXT
itp.
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_PLAN
ponieważ zawiera dobre informacje. Jeśli statistics_level=ALL
możesz użyć V$SQL_PLAN_STATISTICS
.