it-swarm.asia

Bagaimana menemukan pernyataan SQL terbaru dalam database?

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.

25
Sebastian Roth

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

Langkah 1: Tentukan ID instalasi & 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.

17
Sebastian Roth

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 Oracle AWR untuk menunjukkan bidang-bidang yang menyangkut Anda.

alt text

enter image description here

13
Sathyajith Bhat

Anda juga dapat menggunakan V$SQL, Ada beberapa kolom menarik RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXT Dll.

Ini akan memberi Anda 10 pernyataan teratas dengan disk baca (catatan - ini 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 dalam V$SQL_PLAN Anda bisa mendapatkan paket penjelasan aktual untuk kueri:

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

Saya juga suka menggunakan V$SQL_PLAN Karena berisi info yang bagus. Jika statistics_level=ALL Anda dapat menggunakan V$SQL_PLAN_STATISTICS.

4
gabrielp

Untuk SQL terbaru:

select * from v$sql

Untuk sejarah:

select * from dba_hist_sqltext
2
grokster