Pages

19 Temmuz 2011 Salı

“Oradebug hanganalyze” komutunun incelemesi

Oradebug özelliği yeterli döküman kaynağı olmadığından dolayı “gizli” kategoride yer almaktadır. Oysaki Oracle 8.1 sürümünden beri SQL*Plus üzerinden çalıştırılmaktadır. Bu özellik kullanıcı oturumlarını izleyebildiği gibi global olarakta veritabanı izleme işlevlerini sağlamaktadır.

Oradebug komutu çalıştırılmak için SYSDBA hakkına gerek duymaktadır. Bu komut ile yapılacak pek çok faydalı işlemlere gelirsek;

  • Başka kullanıcının oturumu için SQL izlemesinin etkinleştirilmesi veya devredışı bırakılması
  • Yoğun prosesleri askıya almak
  • Paylaşımlı bellek ve semaforlar hakkında bilgileri bulmak
  • İzleme dosyasını kapatmak suretiyl yenisinin oluşturulmasını sağlamak
  • Dahili yapılar ile oynamak ve yığınlar oluşturmak
  • Prosesleri uyandırmak

HANGANALYZE özelliğinin kullanımı

HANGANALYZE özelliği oradebug komutu ile veritabanının askıya alındığı zamanlarda oldukça güçlü ve kullanışlıdır.

HANGANALYZE çıktısı yığın şeklinde değildir. “user dump destination” dizininde bir çıktı oluşturur, kullanıcıların okuyabileceği formattadır. Genel sentaks aşağıdaki gibidir;

SQL> oradebug hanganalyze 3
Hang Analysis in /u01/app/oracle/product/10g/admin/oracle/udump/10g_ora_12655.trc

Buradaki “3” numarası “seviye” olarak adlandırılır. Oracle şirketi müeyyediyeleri son kullanıcılar tarafından HANGANALYZE seviyesinin ençok 3’e kadar kullanılmasına izin verir. Daha yüksek seviyeler sadece Oracle Support Servisi uzmanlarından talep geldiği durumlarda kullanılmalıdır. Aşağıda bu seviyeler ile bilgiler yer almaktadır:

10                    Tüm prosesleri boşaltır(IGN durumu)
5 Level 4 +     Bekleme zincirleri kapsamındaki tüm prosesleri boşaltır(NLEAF durumu)
4 Level 3 +      Bekleme zincirlerindeki yaprak düğümleri(bloklayanlar) boşaltır. (LEAF,LEAF_NW,IGN_DMP durumu)
3 Level 2 +     Sadece askıda kaldığı düşünülen prosesleri boşaltır (IN_HANG durumu)
1-2                  Sadece HANGANALYZE çıktısı alır, hiçbir proses boşaltılmaz

Seviye 4 ve üstü, instance performansını ciddi oranda etkileyecek şekilde çok büyük ve kaynak yoğun çıktı oluşturacaktır. Aşağıda 3. seviyede HANGANALYZE özelliği ile alınan bir çıktı örneği yer almaktadır:

/u01/app/oracle/product/10g/admin/oracle/udump/10g_ora_12655.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME =/u01/app/oracle/product/10g
System name: Linux
Node name: rac01.localdomain
Release: 2.6.10-1.770_14.rhfc3.at
Version: #16 Mon May 5 15:20:24 EST 2011
Machine: i686
Instance name: 10g
Redo thread mounted by this instance: 1
Oracle process number: 14
Unix process pid: 12655, image: oracle@medo.noip.com (TNS V1-V3)
*** SERVICE NAME:(SYS$USERS) 2011-05-18 01:22:24.704
*** SESSION ID:(32.21) 2011-05-18 01:22:24.704
*** 2011-05-18 01:22:24.704
==============
HANG ANALYSIS:
==============
Open chains found:
Other chains found:
Chain 1 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<0/32/21/0x5bda30d4/12655/No Wait>
Chain 2 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<0/41/7/0x5bda35d0/12455/Queue Monitor Wait>
Chain 3 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :
<0/43/20/0x5bda4ebc/12540/wakeup time manager>
Extra information that will be dumped at higher levels:
[level 5] : 3 node dumps -- [SINGLE_NODE] [SINGLE_NODE_NW] [IGN_DMP]
[level 10] : 11 node dumps -- [IGN]
State of nodes
([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predecessor):
[31]/0/32/21/0x5bdd4c68/12655/SINGLE_NODE_NW/1/2//none
[35]/0/36/19/0x5bdd9408/12518/IGN/3/4//none
[37]/0/38/1/0x5bddb7d8/12459/IGN/5/6//none
[39]/0/40/1/0x5bdddba8/12457/IGN/7/8//none
[40]/0/41/7/0x5bdded90/12455/SINGLE_NODE/9/10//none
[42]/0/43/20/0x5bde1160/12540/SINGLE_NODE/11/12//none
[43]/0/44/1/0x5bde2348/12441/IGN/13/14//none
[44]/0/45/1/0x5bde3530/12439/IGN/15/16//none
[45]/0/46/1/0x5bde4718/12437/IGN/17/18//none
[46]/0/47/1/0x5bde5900/12435/IGN/19/20//none
[47]/0/48/1/0x5bde6ae8/12433/IGN/21/22//none
[48]/0/49/1/0x5bde7cd0/12431/IGN/23/24//none
[49]/0/50/1/0x5bde8eb8/12429/IGN/25/26//none
[50]/0/51/1/0x5bdea0a0/12427/IGN/27/28//none
====================
END OF HANG ANALYSIS

HANGANALYZE çıktısının anlamını detaylı açıklayan referans döküman Metalink note 215858.1 de yer almaktadır. Bu yazıda ben sadece bu özelliğin kullanım amacını ve terminolojisini kısaca açıklayacağım;

Zincirler: Kaynak için rekabet eden prosesler tarafından oluşan zincirler. Devirli ve kapalı zincirler “deadlock” lardır ve gerçek asılı olarak değerlendirilir. Açık zincirler, bloklayan tarafından tutulan kaynak için bekleyen proseslerden meydana gelir. Bunlar gerçekte askında olan prosesler değildir, ve oturumun öldürülmesi ve bloklanmış proseslerin işleme devam etmesine izin verilmesiyle çözülebilir.Bir proses bir mandal tuttuğunda( yaygın örnek library latch) ve digger prosesler mandal için beklediklerinde  oldukça kullanışlıdır.

Bu noktada dikkat edilmesi gereken nokta; tüm instance düşeceğinden dolayı SMON ve PMON prosesleri öldürülmemelidir. Her bir zincir girişinin formatı aşağıda yer almaktadır:

Chain 1 : <cnode/sid/sess_srno/proc_ptr/ospid/wait_event> :

Bu kısaltmaların anlamları aşağıdadır:

CNODE=Cluster düğümü
SID = Oturum Id,V$SESSION görünümünün SID kolonu ile aynı
SESS_SRNO = seri numarası V$SESSION görünümünün SERIAL#  kolonu ile aynı
OSPID=İşletim sistemi PID (Process ID)

Düğümler: Düğümler oturumlardır.İlk satır oturum listesini açıklar:

([nodenum]/cnode/sid/sess_srno/session/ospid/state/start/finish/[adjlist]/predecessor):

Buradaki kısaltmaların anlamlarıda zincirlerdeki gibi aynıdır. Burada önemli olan bilgi STATE durumudur. Eğer STATE değeri IN_HANG ise, o zaman bir sorun yoktur. Eğer bu değer LEAF veya LEAF_NW ise, oturum diğerlerini blokluyordur veya muhtemelen açık zincirin zirvesindedir.NLEAF durumu içindeki oturumlar bekleyen oturumlardır ve  askıda şeklinde belirir.Eğer durum IGN veya IGN_DMP ise, oturum boştadır.

0 yorum:

Yorum Gönder