Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So sehen Sie die tatsächliche Oracle SQL-Anweisung, die ausgeführt wird

Auf der Seite des Datenwörterbuchs gibt es viele Tools, die Sie verwenden können, wie z. B. Schema Spy

Um zu sehen, welche Abfragen ausgeführt werden, sehen Sie sich die Ansichten sys.v_$sql und sys.v_$sqltext an. Sie benötigen außerdem Zugriff auf sys.all_users

Beachten Sie, dass Abfragen, die Parameter verwenden, einmal mit Einträgen wie

angezeigt werden
and TABLETYPE=’:b16’

während andere, die dies nicht tun, mehrmals angezeigt werden, wie zum Beispiel:

and TABLETYPE=’MT’

Ein Beispiel für diese Tabellen in Aktion ist die folgende SQL, um die Top 20 Diskread-Schweine zu finden. Sie können dies ändern, indem Sie WHERE rownum <=20 entfernen und fügen Sie vielleicht das ORDER BY-Modul hinzu . Sie finden oft, dass das Modul Ihnen einen Hinweis darauf gibt, welche Software die Abfrage ausführt (z. B.:„TOAD 9.0.1.8“, „JDBC Thin Client“, „[email protected] (TNS V1-V3)“ usw.)

SELECT 
 module, 
 sql_text, 
 username, 
 disk_reads_per_exec, 
 buffer_gets, 
 disk_reads, 
 parse_calls, 
 sorts, 
 executions, 
 rows_processed, 
 hit_ratio, 
 first_load_time, 
 sharable_mem, 
 persistent_mem, 
 runtime_mem, 
 cpu_time, 
 elapsed_time, 
 address, 
 hash_value 
FROM 
  (SELECT
   module, 
   sql_text , 
   u.username , 
   round((s.disk_reads/decode(s.executions,0,1, s.executions)),2)  disk_reads_per_exec, 
   s.disk_reads , 
   s.buffer_gets , 
   s.parse_calls , 
   s.sorts , 
   s.executions , 
   s.rows_processed , 
   100 - round(100 *  s.disk_reads/greatest(s.buffer_gets,1),2) hit_ratio, 
   s.first_load_time , 
   sharable_mem , 
   persistent_mem , 
   runtime_mem, 
   cpu_time, 
   elapsed_time, 
   address, 
   hash_value 
  FROM
   sys.v_$sql s, 
   sys.all_users u 
  WHERE
   s.parsing_user_id=u.user_id 
   and UPPER(u.username) not in ('SYS','SYSTEM') 
  ORDER BY
   4 desc) 
WHERE
 rownum <= 20;

Beachten Sie, dass Sie bei einer langen Abfrage v_$sqltext abfragen müssen. Dies speichert die gesamte Abfrage. Sie müssen ADDRESS und HASH_VALUE nachschlagen und alle Teile aufheben. Beispiel:

SELECT
 *
FROM
 sys.v_$sqltext
WHERE
 address = 'C0000000372B3C28'
 and hash_value = '1272580459'
ORDER BY 
 address, hash_value, command_type, piece
;