Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zobaczyć aktualną instrukcję Oracle SQL, która jest wykonywana?

Po stronie słownika danych jest wiele narzędzi, których możesz użyć, np. Szpieg schematu

Aby sprawdzić, jakie zapytania są uruchomione, spójrz na widoki sys.v_$sql i sys.v_$sqltext. Będziesz także potrzebować dostępu do sys.all_users

Należy zauważyć, że zapytania używające parametrów pojawią się raz z wpisami takimi jak

and TABLETYPE=’:b16’

podczas gdy inne, które nie pojawią się wiele razy, takie jak:

and TABLETYPE=’MT’

Przykładem tych tabel w działaniu jest następujący kod SQL, aby znaleźć 20 najlepszych wieprzów odczytu dysku. Możesz to zmienić, usuwając WHERE rownum <=20 a może dodać moduł ORDER BY . Często okazuje się, że moduł daje nieciekawą wskazówkę, jakie oprogramowanie uruchamia zapytanie (np. „TOAD 9.0.1.8”, „JDBC Thin Client”, „[email protected] (TNS V1-V3)” itp.)

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;

Zauważ, że jeśli zapytanie jest długie .. będziesz musiał zapytać v_$sqltext. To przechowuje całe zapytanie. Będziesz musiał wyszukać ADDRESS i HASH_VALUE i zebrać wszystkie elementy. Np.:

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. Oracle (11.2.0.1) :Jak zidentyfikować wiersz, który jest obecnie aktualizowany przez instrukcję UPDATE

  2. Problem z porównaniem ciągów Oracle PL/SQL

  3. Lepsza współbieżność w Oracle niż SQL Server?

  4. Funkcja ABS() w Oracle

  5. Jak uzyskać skrypt tabeli w Oracle SQL Developer?