Oracle Trace SQL Statements

October 26, 2012 8:27 pm Published by

Per monitorare l’esecuzione di una query eseguita su un DB Oracle,
si può utilizzare la seguente istruzione.

Filtrando eventualmente con il campo module il programma che si sta utilizzando.

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; 

Attenzione che in Oracle viene memorizzata l’istruzione SQL che deve essere eseguita, ma i parametri passati alla query non sono mai presenti e non sono tracciabili.

Per maggiori informazioni:
http://stackoverflow.com/questions/55899/how-to-see-the-actual-oracle-sql-statement-that-is-being-executed

Categorised in: ,

This post was written by admin

Comments are closed here.