Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment voir l'instruction Oracle SQL réelle en cours d'exécution

Du côté du dictionnaire de données, il existe de nombreux outils que vous pouvez utiliser, tels que Schema Spy

Pour voir quelles requêtes sont en cours d'exécution, regardez les vues sys.v_$sql et sys.v_$sqltext. Vous aurez également besoin d'accéder à sys.all_users

Une chose à noter que les requêtes qui utilisent des paramètres apparaîtront une fois avec des entrées comme

and TABLETYPE=’:b16’

tandis que d'autres qui n'apparaîtront pas plusieurs fois, comme :

and TABLETYPE=’MT’

Un exemple de ces tables en action est le SQL suivant pour trouver les 20 premiers porcs en lecture de disque. Vous pouvez changer cela en supprimant le WHERE rownum <=20 et peut-être ajouter le module ORDER BY . Vous trouverez souvent que le module vous donnera un indice sur le logiciel qui exécute la requête (par exemple :"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;

Notez que si la requête est longue .. vous devrez interroger v_$sqltext. Cela stocke toute la requête. Vous devrez rechercher ADDRESS et HASH_VALUE et ramasser toutes les pièces. Ex :

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