Oracle: Sql sunucusu için Profiler gibi sorguları izlemek için bir araç var mı? [kapalı]


86

sql server ile çalışıyorum, ancak Oracle DB ile bir uygulamaya geçmem gerekiyor. uygulama sorgularımı izlemek için, Sql Server'da harika Profiler aracını kullanıyorum. Oracle için eşdeğer bir şey var mı?


38
Neden yanlış bir cevabı kabul ettin? Planın profil oluşturucunun yaptığını YAPMADIĞINI açıklayın. Tamamen alakasız.
Yasemin

1
gibi en iyi aracı buldunuz sql server profilermu? şimdi ne kullanıyorsun
Şahid Ghafoor

Oracle uygulamalarının izini sürmek hakkında bir kitap yazdım. Method-r.com adresinde PDF biçiminde mevcuttur .
Cary Millsap

Lütfen, Devart'tan Oracle için dbForge Studio'daki oracle profiline göz atın.
Devart

Aşağıda pek çok yanıt var, ancak garip bir şekilde, hiç kimse Oracle'ın PL / SQL için iki profilleyicisinden bahsetmedi : DBMS_PROFILER(temel ve sınırlı, ancak süper kullanışlı) veya DBMS_HPROF(daha doğru ancak daha fazla kurulum gerektirir). Ancak, SQL Server'ı bilmiyorum, bu yüzden Oracle paketlerinden farklı bir profil oluşturma konseptine sahip olması ve istediğiniz şey Oracle'da izlemeye benziyor olabilir.
William Robertson

Yanıtlar:


22

Oracle Enterprise Manager'ı, yürütülen sorgu, yürütme planı, kilitler, bazı istatistikler ve hatta daha uzun görevler için bir ilerleme çubuğu ile aktif oturumları izlemek için kullanabilirsiniz.

Bakınız: http://download.oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955

Örnek -> oturumlara gidin ve her oturumun SQL Sekmesini izleyin.

Başka yollar da var. Kurumsal yönetici, burada belgelendirilenler gibi özel görünümlerde zaten mevcut olanı güzel renklerle ortaya koyuyor: http://www.oracle.com/pls/db92/db92.catalog_views?remark=homepage

Ve elbette, PLAN İÇİN AÇIKLAMA, TRACE aracı ve diğer araçsallaştırma yöntemlerini de kullanabilirsiniz. En pahalı SQL Sorguları için işletme yöneticisinde bazı raporlar vardır. Önbellekte tutulan son sorguları da arayabilirsiniz.


19

Kolay bir çözüm buldum

Aşama 1. PLSQL veya sqldeveloper veya başka bir sorgu arayüzü kullanarak bir yönetici kullanıcıyla DB'ye bağlanın

Adım 2. aşağıdaki komut dosyasını çalıştırın; S.SQL_TEXT sütununda, yürütülen sorguları göreceksiniz

SELECT            
 S.LAST_ACTIVE_TIME,     
 S.MODULE,
 S.SQL_FULLTEXT, 
 S.SQL_PROFILE,
 S.EXECUTIONS,
 S.LAST_LOAD_TIME,
 S.PARSING_USER_ID,
 S.SERVICE                                                                       
FROM
 SYS.V_$SQL S, 
 SYS.ALL_USERS U
WHERE
 S.PARSING_USER_ID=U.USER_ID 
 AND UPPER(U.USERNAME) IN ('oracle user name here')   
ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;

Bununla ilgili tek sorun, girdi parametreleri değerlerini (işlev çağrıları için) göstermenin bir yolunu bulamıyorum, ancak en azından Oracle'da neyin çalıştırıldığını ve belirli bir araç kullanmadan sırasını görebiliyoruz.


2
Sorgu metni 1000 karakterden fazlaysa S.SQL_FULLTEXT ekleyebilirsiniz, çünkü SQL_TEXT bu noktada kesilir.
Tridus

2
VARCHAR2 (19) olduğu için LAST_ACTIVE_TIME tarihine kadar sipariş etmemelisiniz. Bunun yerine şunu kullanın: TO_DATE TARİHİNDE SİPARİŞ VER (S.LAST_LOAD_TIME, 'YYYY-AA-GG / HH24: MI: SS') azalan
Igor Krupitsky

1
ORA-00942: tablo veya görünüm mevcut değil 00942. 00000 - "tablo veya görünüm yok" * Neden: * Eylem: Satırda Hata: 11 Sütun: 6 Bu, yönetici üstünlüğüm olmadığı anlamına mı geliyor?
toha

Bu, param değerlerini içermez. buna da sahip olmak istiyorsanız, bir göz atın: stackoverflow.com/a/14217618/6339469
HamedH

16
alter system set timed_statistics=true

--veya

alter session set timed_statistics=true --if want to trace your own session

- yeterince büyük olmalı:

select value from v$parameter p
where name='max_dump_file_size' 

- İlgilendiğiniz seansın sid ve seri numarasını bulun:

 select sid, serial# from v$session
 where ...your_search_params...

--10046 olayı ile izlemeye başlayabilirsiniz, dördüncü parametre izleme seviyesini ayarlar (12 en büyüğüdür):

 begin
    sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
 end;

- sıfır seviyesini ayarlayarak izlemeyi kapatın:

begin
   sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;

/ * olası seviyeler: 0 - kapalı 1 - minimum seviye. Set sql_trace = true 4'e çok benzer - bağlama değişkenleri değerleri izleme dosyasına eklenir 8 - beklemeler eklenir 12 - hem bağlama değişken değerleri hem de bekleme olayları eklenir * /

- kendi oturumunuzu daha büyük bir seviyede izlemek istiyorsanız aynı:

alter session set events '10046 trace name context forever, level 12';

--kapat:

alter session set events '10046 trace name context off';

- Ham izleme bilgilerinin bulunduğu dosya bulunacaktır:

 select value from v$parameter p
 where name='user_dump_dest'

- dosyanın adı (*. trc) spid içerecektir:

 select p.spid from v$session s, v$process p
 where s.paddr=p.addr
 and ...your_search_params...

--ayrıca adı kendiniz de ayarlayabilirsiniz:

alter session set tracefile_identifier='UniqueString'; 

--son olarak, TKPROFizleme dosyasını daha okunaklı hale getirmek için kullanın :

C:\ORACLE\admin\databaseSID\udump>
C:\ORACLE\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf
TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
C:\ORACLE\admin\databaseSID\udump>

- izleme dosyası kullanım durumunu görüntülemek için:

set serveroutput on size 30000;
declare
  ALevel binary_integer;
begin
  SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel);
  if ALevel = 0 then
    DBMS_OUTPUT.Put_Line('sql_trace is off');
  else
    DBMS_OUTPUT.Put_Line('sql_trace is on');
  end if;
end;
/

Sadece biraz çevrilmiş http://www.sql.ru/faq/faq_topic.aspx?fid=389 Orijinal daha doludur, ancak yine de bu, başkalarının IMHO yayınladığından daha iyidir


Diğer cevaplardan çok daha faydalı!
Andomar

Çok karışık. Onu kimse kullanmayacak.
ADM-IT

7

GI Oracle Profiler v1.2

Oracle'ın SQL Server Profiler'a benzer şekilde yürütülen sorguları yakalaması için bir Araçlar. Bu veritabanı sunucusunu kullanan uygulamaların bakımı için vazgeçilmez bir araçtır.

iacosoft.com resmi sitesinden indirebilirsiniz.


Merhaba, bu yazılımı kullanmak için ORACLE'den özel bir Lisansa ihtiyacınız var mı? Oracle'ın belirli tabloları / görünümleri sorgulamanıza izin verdiğini biliyorum ve bunu yaparsanız ve bunun için bir lisansınız yoksa sizden ekstra ücret alırlar.
sergiu

2
Merhaba, v $ sqlarea sorgusu için ödeme yapmanız gerekiyor mu? Ne diyen bağlantıya girebilirim?
pio

mükemmel teşekkürler dostum !!! Beni çok işten
kurtarıyorsun

Sorgum başarısız olursa profil oluşturucu tarafından gösterilmez.
ADM-IT


5

Yakın zamandaki bir soruyu bir kopya olarak oyladığımı ve bu yöne işaret ettiğimi görünce. . .

Birkaç tane daha - SQL * Plus - SET AUTOTRACE ON - yürütülen her ifade için plan ve istatistikleri açıklayacaktır.

TOAD ayrıca istemci tarafı profillemeye izin verir.

Bunların her ikisinin de dezavantajı, size yalnızca ifade için yürütme planını söylemeleridir, ancak iyileştiricinin bu plana nasıl ulaştığını söylememesidir - bunun için daha düşük düzeyde sunucu tarafı izlemeye ihtiyacınız olacaktır.

Anlaşılması gereken bir diğer önemli nokta ise Statspack anlık görüntüleridir - bunlar veritabanının performansına bir bütün olarak bakmak için iyi bir yoldur. Plan vb., Darboğazlar oluşturan bireysel SQL ifadelerini bulmada iyidir. Statspack, probleminizin, iyi bir yürütme planına sahip basit bir ifadenin dakikada 1 milyon kez çağrılması olduğu gerçeğini belirlemede iyidir.


3

Yakalama, zaman içinde iki nokta arasında çalıştırılan tüm SQL'i yakala. Tıpkı SQL Server'ın yaptığı gibi.

Veritabanında belirli bir kullanıcının çalıştırdığı SQL'i yakalamanın yararlı olduğu durumlar vardır. Genellikle o kullanıcı için oturum izlemeyi etkinleştirirsiniz, ancak bu yaklaşımla ilgili iki olası sorun vardır.

  1. Birincisi, birçok web tabanlı uygulamanın, birden çok kullanıcı arasında paylaşılan bir kalıcı veritabanı bağlantıları havuzu bulundurmasıdır.
  2. İkincisi, bazı uygulamaların bağlanması, biraz SQL çalıştırması ve çok hızlı bir şekilde bağlantıyı kesmesidir, bu da oturum izlemeyi etkinleştirmeyi zorlaştırır (bu durumda oturum izlemeyi etkinleştirmek için elbette bir oturum açma tetikleyicisi kullanabilirsiniz).

Soruna hızlı ve kirli bir çözüm, zaman içinde iki nokta arasında çalıştırılan tüm SQL ifadelerini yakalamaktır.

Aşağıdaki prosedür, her biri belirli bir noktadaki veritabanının anlık görüntüsünü içeren iki tablo oluşturacaktır. Tablolar daha sonra o dönem boyunca çalıştırılan tüm SQL'in bir listesini üretmek için sorgulanacaktır.

Mümkünse, bunu sessiz bir geliştirme sisteminde yapmalısınız - aksi takdirde çok fazla veriyi geri alma riskiyle karşılaşırsınız.

  1. İlk anlık görüntüyü alın İlk anlık görüntüyü oluşturmak için aşağıdaki sql'yi çalıştırın:

    create table sql_exec_before as
    select executions,hash_value
    from v$sqlarea
    /
    
  2. Kullanıcının uygulama içindeki görevini gerçekleştirmesini sağlayın.

  3. İkinci anlık görüntüyü alın.

    create table sql_exec_after as
    select executions, hash_value
    from v$sqlarea
    /
    
  4. Sonuçları kontrol edin Artık SQL'i yakaladığınıza göre, sonuçları sorgulamanın zamanı geldi.

Bu ilk sorgu, yürütülen tüm sorgu karmalarını listeleyecektir:

select  aft.hash_value
from sql_exec_after aft
left outer join sql_exec_before bef
  on aft.hash_value  =  bef.hash_value 
where aft.executions > bef.executions
   or bef.executions is null;
/

Bu, hash'i ve SQL'in kendisini gösterecektir: hash_value'da 999 satır sayfa ayarla 100 kes

select  hash_value, sql_text
from    v$sqltext
where   hash_value in (
    select  aft.hash_value
    from sql_exec_after aft
    left outer join sql_exec_before bef
      on aft.hash_value  =  bef.hash_value
    where aft.executions > bef.executions
       or bef.executions is null;
)
order by
    hash_value, piece
/

5. Düzenleyin Bitirdiğinizde anlık görüntü tablolarını kaldırmayı unutmayın:

drop table sql_exec_before
/

drop table sql_exec_after
/

Tekniği gösteren eksiksiz komut dosyaları için teşekkür ederiz.
Roman Pokrovskij

2

Oracle, diğer veritabanları ile birlikte bir yürütme planı oluşturmak için belirli bir sorguyu analiz eder. Bu plan, verileri almanın en verimli yoludur.

Oracle explain plan, sorguyu analiz eden ancak çalıştırmayan, bunun yerine sorgulayabileceğiniz özel bir tablo (plan tablosu) dolduran ' ' ifadesini sağlar .

Sözdizimi (basit sürüm, plan tablosundaki satırları özel bir kimlikle işaretlemek veya farklı bir plan tablosu kullanmak gibi başka seçenekler de vardır):

explain plan for <sql query>

Bu verilerin analizi başka bir soruya veya daha fazla araştırmanıza bırakılır.



1

Bu, birkaç araç (SQL Trace ve tkprof) dahil olmak üzere SQL sorgularının nasıl izleneceğini açıklayan bir Oracle dokümanıdır.

bağlantı


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.