sql >> Base de Datos >  >> RDS >> Oracle

Cómo ver la instrucción Oracle SQL real que se está ejecutando

En el lado del diccionario de datos, hay muchas herramientas que puede usar, como Schema Spy

Para ver qué consultas se están ejecutando, mire las vistas sys.v_$sql y sys.v_$sqltext. También necesitará acceso a sys.all_users

Una cosa a tener en cuenta es que las consultas que usan parámetros aparecerán una vez con entradas como

and TABLETYPE=’:b16’

mientras que otros que no aparecerán varias veces como:

and TABLETYPE=’MT’

Un ejemplo de estas tablas en acción es el siguiente SQL para encontrar los 20 principales acaparadores de lectura de disco. Puede cambiar esto eliminando WHERE rownum <=20 y tal vez agregar módulo ORDER BY . A menudo encontrará que el módulo le dará una pista vaga sobre qué software está ejecutando la consulta (por ejemplo:"TOAD 9.0.1.8", "JDBC Thin Client", "[email protected] (TNS V1-V3)", etc.)

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;

Tenga en cuenta que si la consulta es larga... tendrá que consultar v_$sqltext. Esto almacena toda la consulta. Tendrás que buscar la DIRECCIÓN y el HASH_VALUE y recoger todas las piezas. Por ejemplo:

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