Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да видите действителния SQL оператор на Oracle, който се изпълнява

От страна на речника на данните има много инструменти, които можете да използвате, като Schema Spy

За да видите какви заявки се изпълняват, погледнете изгледите sys.v_$sql и sys.v_$sqltext. Ще ви е необходим и достъп до sys.all_users

Трябва да се отбележи, че заявките, които използват параметри, ще се покажат веднъж със записи като

and TABLETYPE=’:b16’

докато други, които не, ще се покажат няколко пъти, като:

and TABLETYPE=’MT’

Пример за тези таблици в действие е следният SQL за намиране на 20-те най-добри дискове. Можете да промените това, като премахнете WHERE rownum <=20 и може би да добавите МОДУЛ ORDER BY . Често ще откриете, че модулът ще ви даде улика за това какъв софтуер изпълнява заявката (напр.:"TOAD 9.0.1.8", "JDBC Thin Client", "[email protected] (TNS V1-V3)" и т.н.)

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;

Имайте предвид, че ако заявката е дълга .. ще трябва да заявите v_$sqltext. Това съхранява цялата заявка. Ще трябва да потърсите ADDRESS и HASH_VALUE и да вземете всички парчета. Напр.:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Може ли %NOTFOUND да върне null след извличане?

  2. Преброяване на броя на поява на символ в Oracle SQL

  3. Стъпка по стъпка процес на надграждане за R12.2 Надстройка, част -1

  4. Известие за промяна на базата данни на Oracle

  5. Може ли някой да обясни какво наистина прави изявлението MERGE в Oracle?