Veritabanındaki en son SQL ifadeleri nasıl bulunur?


Yanıtlar:


17

İşte işi yapan SQL. Deneme için aç.

Adım 1: installatin kimliklerini ve kullanıcı kimliklerini belirleyin.

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

Adım 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

Döndürülen birden fazla kimlik ve örnek kimlik olabilir. Dolayısıyla, kullanıcıların bu verileri bir web arayüzünde vb. Nasıl kullanacakları konusundaki tercihlerinden kaynaklanmaktadır.


Sadece küçük not: Oracle (hangi sürümden hiçbir fikrin olmadığını) inoperatörün ... AND (s.inst_id, s.sid) in ( (:id1, :sid1), (:id2, :sid2), ... )
tote

1
'inst_id' örnek kimliğini gösterir, kurulum kimliği anlamına gelmez.
mucize173

13

Oracles Enterprise Monitor konsolu, hangi SQL sorgularının maksimum CPU, darboğazlar, veritabanındaki en üst düzey etkinlik, hangi SQL sorgularını aldığını, SQL ve diğerlerini engellediğini gösterir.

Tarihsel bir yaklaşım için, Oracle'ın AWR raporlarını sizinle ilgili alanları işaretlemek için kullanabilirsiniz.

alt metin

görüntü tanımını buraya girin


1
Meraktan yok - AWR, tüm Oracle lisansları için mevcut bir araçtır ve yalnızca komut satırı üzerinden kullanabilir miyim?
Sebastian Roth

2
Üzgünüm, söylemeliydim - bildiğim kadarıyla, AWR ayrı bir lisanslama gerektirir - Oracle Tuning & Diagnostic Pack . Enterprise Manager konsolundan AWR kullanmayı tercih ediyorum - Enterprise Manager konsolunu kullanma ayrıcalığına (!) Sahip oldum. Ayrıca ,
SQL'leri

1
Oracle Enterprise Manager (OEM) çok hoş. Otomatik olarak yenilenen grafiklerle veritabanı sağlığımızı neredeyse gerçek zamanlı olarak izleyebiliriz. Birincil veritabanlarımızın 24x7'si için OEM'i gösteren bir duvara asılı büyük bir monitörümüz var ve bu sorunların ortaya çıktıklarında tespit edilmesinde oldukça faydalı.
ScottCher

4

Ayrıca kullanabilirsiniz V$SQL, birkaç ilginç sütun var RUNTIME_MEM, EXECUTIONS, DISK_READS, SORTS, ELAPSED_TIME, SQL_FULLTEXT.

Bu size disk okuması ile ilk 10 ifadeyi verir (not - bu tüm işlemler için kümülatiftir):

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

Eğer ifade hala mevcutsa, V$SQL_PLANsorgu için gerçek bir açıklama planı alabilirsiniz:

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

Ayrıca V$SQL_PLANiyi bilgi içerdiği için kullanmayı seviyorum . Eğer statistics_level=ALLkullanabilirsen V$SQL_PLAN_STATISTICS.


2

Son SQL için:

select * from v$sql

Tarih için:

select * from dba_hist_sqltext
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.