Bagaimana menemukan pernyataan SQL terbaru dalam database?

25

Saya ingin mendapatkan pernyataan yang dieksekusi terbaru dalam database saya, bersama dengan indikator kinerja.

Karena itu, saya ingin tahu, pernyataan SQL mana yang paling intensif CPU / DISK.

Sebastian Roth
sumber

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.

Sebastian Roth
sumber
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

Sathyajith Bhat
sumber
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.

Gabrielp
sumber
2

Untuk SQL terbaru:

select * from v$sql

Untuk sejarah:

select * from dba_hist_sqltext
pengemis
sumber