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.
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.
Jawaban:
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.
in
operator dengan tuple, jadi dari contoh di atas... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
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.
Anda juga dapat menggunakan V$SQL
, ada beberapa kolom yang menarik RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXT
dll.
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_PLAN
Anda bisa mendapatkan rencana penjelasan aktual untuk kueri:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
Saya juga suka menggunakan V$SQL_PLAN
karena mengandung info yang bagus. Jika Anda, statistics_level=ALL
Anda dapat menggunakan V$SQL_PLAN_STATISTICS
.