Wie finde ich die neuesten SQL-Anweisungen in der Datenbank?


Antworten:


17

Hier ist die SQL, um die Arbeit zu erledigen. Zur Prüfung offen.

Schritt 1: Bestimmen Sie die Installations- und Benutzer-IDs.

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

Schritt 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

Möglicherweise werden mehrere IDs und Instanz-IDs zurückgegeben. Es liegt also an den Benutzern, wie sie diese Daten in einer Weboberfläche usw. verwenden möchten.


Nur eine kleine Anmerkung: Oracle unterstützt (keine Ahnung von welcher Version) inOperator mit Tupeln, also aus obigem Beispiel... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
Betlista

1
'inst_id' steht für die Instanz-ID, nicht für die Installations-ID.
miracle173

13

Die Oracles Enterprise Monitor-Konsole zeigt eine Fülle von Informationen darüber an, welche SQL-Abfragen die maximale CPU-Auslastung, Engpässe, die höchste Aktivität in der Datenbank und das Blockieren von SQLs et al. Beanspruchen.

Für einen historischen Ansatz können Sie die AWR- Berichte von Oracle verwenden , um Bereiche zu identifizieren, die Sie betreffen.

Alt-Text

Bildbeschreibung hier eingeben


1
Aus Neugier - AWR ist ein Tool, das für alle Oracle-Lizenzen verfügbar ist. Kann ich es nur über die Befehlszeile verwenden?
Sebastian Roth

2
Entschuldigung, ich hätte es erwähnen sollen - soweit ich weiß, erfordert AWR eine separate Lizenz - das Oracle Tuning & Diagnostic Pack . Ich bevorzuge die Verwendung von AWR über die Enterprise Manager-Konsole. Ich habe das Privileg (!), Die Enterprise Manager-Konsole zu verwenden. Ich fand auch , dass Sie SQL Developer verwenden können, um SQLs zu überwachen, aber das erfordert die oben genannte Lizenzierung
Sathyajith Bhat

1
Oracle Enterprise Manager (OEM) ist sehr nett. Mit automatisch aktualisierten Diagrammen können wir den Zustand unserer Datenbank nahezu in Echtzeit überwachen. An der Wand hängt ein großer Monitor, auf dem OEM-Daten für unsere Primärdatenbanken rund um die Uhr angezeigt werden. Dies ist von großem Vorteil, wenn es darum geht, auftretende Probleme zu identifizieren.
ScottCher

4

Sie können auch verwenden V$SQL, es gibt mehrere interessante Spalten RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXTusw.

Auf diese Weise erhalten Sie die Top-10-Anweisungen beim Lesen von Datenträgern (Anmerkung: Dies ist für alle Ausführungen kumulativ):

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

Wenn die Anweisung noch vorhanden ist V$SQL_PLAN, können Sie einen tatsächlichen Erklärungsplan für die Abfrage abrufen:

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

Ich benutze auch gerne, V$SQL_PLANda es gute Infos enthält. Wenn statistics_level=ALLdu kannst V$SQL_PLAN_STATISTICS.


2

Für aktuelles SQL:

select * from v$sql

Für die Geschichte:

select * from dba_hist_sqltext
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.