Bagaimana menemukan pernyataan SQL terbaru dalam database?


Jawaban:


17

Berikut adalah SQL untuk melakukan pekerjaan itu. Terbuka untuk uji coba.

Langkah 1: Tentukan ID pemasangan & ID pengguna.

SELECT inst_id,sid FROM gv$session WHERE username='<ENTER-USERNAME>';

Langkah 2:

SELECT 
      s.sid
     ,s.CLIENT_INFO
     ,s.MACHINE
     ,s.PROGRAM
     ,s.TYPE
     ,s.logon_time
     ,s.osuser
     ,sq.sorts
     ,sq.DISK_READS
     ,sq.BUFFER_GETS
     ,sq.ROWS_PROCESSED
     ,sq.SQLTYPE
     ,sq.SQL_TEXT
 FROM gv$session s    
    , gv$sql sq
WHERE s.SQL_HASH_VALUE = sq.HASH_VALUE
  AND s.inst_id = :inst_id -- replace with instID from above
  AND s.sid = :sid -- replace with ID from above
  AND sq.inst_id = s.inst_id

Mungkin ada beberapa Id & misalnya Id dikembalikan. Jadi terserah pilihan pengguna tentang cara menggunakan data ini di antarmuka web, dll.


Hanya catatan kecil: Oracle mendukung (tidak tahu dari versi mana) inoperator dengan tuple, jadi dari contoh di atas... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
Betlista

1
'inst_id' adalah singkatan dari instance id, itu bukan berarti id instalasi.
miracle173

13

Konsol Oracles Enterprise Monitor menunjukkan banyak informasi tentang query SQL mana yang mengambil CPU maks, bottlenecks, aktivitas teratas dalam database, memblokir SQLs et al.

Untuk pendekatan historis, Anda dapat menggunakan laporan AWR Oracle untuk menunjukkan titik-titik tentang Anda.

teks alternatif

masukkan deskripsi gambar di sini


1
Karena penasaran - AWR adalah alat yang tersedia untuk semua lisensi Oracle & bisakah saya menggunakannya hanya melalui command line?
Sebastian Roth

2
Maaf saya seharusnya menyebutkannya - dari yang saya tahu, AWR memerlukan lisensi terpisah - Oracle Tuning & Diagnostic Pack . Saya lebih suka menggunakan AWR dari konsol Enterprise Manager - Saya telah diberkati dengan hak istimewa (!) Untuk memanfaatkan konsol Enterprise Manager. Saya juga menemukan bahwa Anda dapat menggunakan Pengembang SQL untuk memantau SQL, tetapi itu memerlukan lisensi di atas
Sathyajith Bhat

1
Oracle Enterprise Manager (OEM) sangat bagus. Kami dapat memantau kesehatan basis data kami dalam waktu dekat dengan grafik yang disegarkan secara otomatis. Kami memiliki monitor besar yang tergantung di dinding yang menunjukkan OEM untuk basis data utama kami 24x7 dan sangat bermanfaat dalam mengidentifikasi masalah yang terjadi.
ScottCher

4

Anda juga dapat menggunakan V$SQL, ada beberapa kolom yang menarik RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXTdll.

Ini akan memberi Anda 10 pernyataan teratas dengan disk baca (catatan - ini adalah kumulatif untuk semua eksekusi):

select sql_id,child_number from
(
select sql_id,child_number from v$sql
order by disk_reads desc
)
where rownum<11

Jika pernyataan itu masih ada di dalam, V$SQL_PLANAnda bisa mendapatkan rencana penjelasan aktual untuk kueri:

select * from table(dbms_xplan.display_cursor('sql_id',child_number));

Saya juga suka menggunakan V$SQL_PLANkarena mengandung info yang bagus. Jika Anda, statistics_level=ALLAnda dapat menggunakan V$SQL_PLAN_STATISTICS.


2

Untuk SQL terbaru:

select * from v$sql

Untuk sejarah:

select * from dba_hist_sqltext
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.