sql >> Databasteknik >  >> RDS >> Oracle

Hur man ser den faktiska Oracle SQL-satsen som körs

På sidan med dataordboken finns det många verktyg du kan använda för att t.ex. Schema Spy

För att titta på vilka frågor som körs titta på vyerna sys.v_$sql och sys.v_$sqltext. Du behöver också tillgång till sys.all_users

En sak att notera att frågor som använder parametrar kommer att dyka upp en gång med poster som

and TABLETYPE=’:b16’

medan andra som inte kommer att dyka upp flera gånger som:

and TABLETYPE=’MT’

Ett exempel på dessa tabeller i aktion är följande SQL för att hitta de 20 bästa disklästa hogs. Du kan ändra detta genom att ta bort WHERE radnumret <=20 och kanske lägga till ORDER BY-modulen . Du upptäcker ofta att modulen ger dig en ledtråd om vilken programvara som kör frågan (t.ex.:"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;

Observera att om frågan är lång .. måste du fråga v_$sqltext. Detta lagrar hela frågan. Du måste slå upp ADDRESS och HASH_VALUE och plocka upp alla bitar. T.ex.:

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


  1. Skapa en beräknad kolumn i SQL Server med T-SQL

  2. Gå och IN-klausul i Postgres

  3. Migrera från Oracle Database till MariaDB - Vad du bör veta

  4. Konvertera 'smalldatetime' till 'datetime' i SQL Server (T-SQL-exempel)