Pages

8 Ocak 2011 Cumartesi

Paylaşımlı bellek ve semaforlar – Oracle

Veritabanı bazı durumlarda düzgün bir şekilde kapatılmadığında paylaşımlı bellek serbest bırakılmayabilir. Bu durumda oturum açmak istediğinizde veritabanı açılışında aşağıdaki hatayı alırsınız.

$ sqlplus /nolog
SQL> connect / as sysdba

ERROR:
ORA-03113: end-of-file on communication channel

Bu gibi sorunları çözmek için geçersiz Oracle prosesleri tarafından kilitlenmiş veya bloklanmış paylaşımlı bellek ve semaforları kontrol edebilirsiniz. Ancak bundan önce UNIX mimarisinde paylaşımlı bellek segmentlerinin ve semaforların ne olduğunu kısaca anlamak gerekiyor.


Paylaşımlı bellek segmentleri
Paylaşımlı bellek prosesleri paylaşımlı bellek segmentlerine yerleştirerek onların genel yapılara ve verilere erişmesi için izin verir. Prosesler arasından veri geçerken kernel karışması olmamasından itibaren en uygun Interprocess Communication(IPC) uyum şeklidir. Aslında verinin prosesler arasında kopyalanmasına gerek yoktur.

Oracle prosesler tarafından paylaşılan bellek alanı olan SGA nın paylaşımlı bellek segmentlerini kullanır.Oracle. SGA’nın veritabanı önbelleğini ve daha fazlasını tuttuğu andan itibaren SGA büyüklüğünün Oracle performansında anlamlı bir etkisi vardır.

Tüm paylaşımlı bellek ayarlarını görmek için alttakini çalıştırın;

 $ ipcs -lm
—— Shared Memory Limits ——–
max number of segments = 4096
max seg size (kbytes) = 4194303
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1


Paylaşımlı bellek segmentinin maksimum değeri SHMMAX parametresi tarafından karar verilir.
ipcs -m komutu paylaşımlı bellek segmentlerini, bu segmentlerin büyüklüğünü ve hangi kullanıcıların bu segmentlerin sahibi olduğu bilgisini verir.

$ ipcs -m
—— Shared Memory Segments ——–
key               shmid      owner      perms      bytes      nattch     status
0x0001ffb8   0            root         666         76           3
0×00025990  32769       root         666        8308                3
0x00027cb9  65538       root         666        132256            1
0x00027cba  98307       root         666        132256            1
0xf771930c  1277956    oracle01 660        2166358016   144


Semaforlar
ipcs –ls komutunu kullanarak semafor ayarlarını görebiliriz.

$ ipcs -ls
—— Semaphore Limits ——–
max number of arrays = 1100
max semaphores per array = 1100
max semaphores system wide = 32000
max ops per semop call = 100
semaphore max value = 32767


SEMMSL parametresi semaforların maksimum büyüklüğünü belirler. Alttaki komutu kullanarak farklı proseslere atanan çeşitli semaforları görebiliriz.

$ ipcs -s
—— Semaphore Arrays ——–
key        semid      owner      perms      nsems
0×00000000 393216     root      666        1
0×00000000 425985     root      666        1
0×00000000 458754     root      666        1
0×00000000 491523     root      666        1
0x0001ffb8 524292     root      666        1
0x000251c0 557061     root      666        1
0x000255a8 589830     root      666        1
0×00025990 622599     root      666        1
0x000278d1 655368     root      666        1
0x00027cb9 688137     root      666        1
0x000278d2 720906     root      666        1
0x00027cba 753675     root      666        1
0x26e55b68 3244044    oracle01  660        1004


Aynı zamanda Oracle’da yararlı olan sysrev kullanılarak Oracle proseslerine atanan semaforları ve paylaşımlı bellek segmentlerini görebiliriz.
$ sysresv

IPC Resources for ORACLE_SID “tkr12r3m2″ :
Shared Memory:
ID              KEY
1277956         0xf771930c
Semaphores:
ID              KEY
3244044         0x26e55b68
Oracle Instance alive for sid “tkr12r3m2″


Eğer instance canlı değilse bu paylaşımlı bellek segmenleri ile semaforları ortadan kaldırmak için ipcrm komutu kullanılabilir.
ipcrm -m <Shared Memory ID (shmid)>
ipcrm -s <Semaphore ID (semid)>

0 yorum:

Yorum Gönder