Oracle
 sql >> Database >  >> RDS >> Oracle

Come vedere l'effettiva istruzione Oracle SQL in esecuzione

Sul lato del dizionario dei dati ci sono molti strumenti che puoi usare come Schema Spy

Per vedere quali query sono in esecuzione, guarda le viste sys.v_$sql e sys.v_$sqltext. Avrai anche bisogno dell'accesso a sys.all_users

Una cosa da notare che le query che utilizzano parametri verranno visualizzate una volta con voci come

and TABLETYPE=’:b16’

mentre altri che non si presenteranno più volte come:

and TABLETYPE=’MT’

Un esempio di queste tabelle in azione è il seguente SQL per trovare i primi 20 maiali diskread. Puoi cambiarlo rimuovendo il WHERE rownum <=20 e magari aggiungere il modulo ORDINA PER . Spesso scopri che il modulo ti darà un indizio su quale software sta eseguendo la query (ad esempio:"TOAD 9.0.1.8", "JDBC Thin Client", "[email protected] (TNS V1-V3)" ecc.)

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;

Nota che se la query è lunga .. dovrai interrogare v_$sqltext. Questo memorizza l'intera query. Dovrai cercare ADDRESS e HASH_VALUE e raccogliere tutti i pezzi. Es.:

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