27 Ekim 2010 Çarşamba

Oracle shared server opsiyonu ve IFS

Geçenlerde, IFS ERP uzmanı olarak çalışmaya devam eden arkadaşlarımdan birisi aradı.
Garip bir sorunundan bahsetti.

Problem oluşan sistem özellikleri
----------------------------------------
windows 2008 server 32 bit
8 gb ram
100+ acık kullanıcı connection
vs.

Problem Açıklaması
----------------------------------------
Database e belirli bir sayı üstü kullanıcı bağlandığında sistem yeni connection isteklerine
cevap vermiyormuş. Ta ki bazı connectionlar kapatılıncaya kadar.
Bu sorun oluştuğu anda ise sistem ram inin 2.6 gb gibi bir kısmı yani yarıdan az kısmı kullanılıyormuş.


Hımmm.

Oracle database e bağlanma sürecine biraz daha yakından bakacak olursak;

Oracle listener, her dedicated session için server tarafında bir dedicated server process
oluşturur(veya oluşturmaya çalışır). Bu oluşturulan process belirli miktarda bellek kullanır.
32 bit işletim sistemlerinde oracle, 2.5-3 gb civarının üstünde ram
kullanamadığından bu sorun oluşuyor. (2.5 - 3 gb den fazla ram kullanamama sorunu,
oracle dan değil 32 bit mimariden kaynaklanıyor yanlış anlaşılmasın )

Şimdi bir kere en iyi çözüm 64 bit işletim sistemine oracle kurmak ve gerekiyorsa sisteme ram eklemek.
Sonrada gerekli Oracle memory parametrelerini set etmek.

İkinci en iyi çözüm shared server opsiyonunu aktifleştirmek. Çünkü bu şekilde
her yeni connection için yeni bir dedicated server açılmayacak. Dolayısıyla memory
dolmayacak. Ama yoğun data kullanan kullanıcıların biraz daha yavaş çalışması duruma göre söz konusu.

Peki IFS ortamında nasıl yaparız bu
oracle shared server ı aktifleştirme işini?
------------------------------------------
1) Server parametrelerinde değişiklikler

alter system set shared_servers=10;
alter system set dispatchers='(PROTOCOL=TCP)';

Yukarıdaki sql statement lerini çalıştırdıktan bir süre sonra tns yöntemi dışı tüm bağlantılar
shared olmaya başlayacaktır.

Bu durumu aşağıdaki query ile de inceleyebilirsiniz.
SERVER sütünu SHARED ve NONE olan bağlantılar shared bağlantılardır.

select username,server from v$session order by server desc

Oracle parametrelerini burada sadece memory ye set ettik yani
database restart ında shared server konfigurasyonumuz yok olacak.
Parametrelerin kalıcı olması için testlerin ardından parametre dosyası güncellenebilir.

2) Client tarafında değişiklikler

IFS teki(Centura desek daha doğru) bağlantı tanımları runtime klasörü altındaki sql.ini dosyasından yapılıyor.
Bu dosya içerisinde, [oragtwy] tiketi altındaki remotedbname değerleri
bizim database bağlantılarımız.Örneğin sql.ini dosyamız aşağıdaki gibi olsun.

[oragtwy]
longbuffer=32760
fetchrow=20
maperror=OFF
substitute=SYSSQL.,
remotedbname=gercek,@//bizim_server_name_veya_ip:1521/bizim_sid

yukarıdaki 1. adımdaki server parametreleri set edildikten sonra,
buradaki "gercek" bağlantısından bağlanan tüm yeni client bağlantıları,
shared server connection u açarlar.

Burada bir sorun var .Tüm kullanıcı bağlantıları shared oldu. Fakat ben
bazı kullanıcılarımın performans açısından shared değil dedicated bağlanmasını
istiyorum diyebilirsiniz.

İşte bunu sağlayabilmek için sql.ini dosyasındaki, remotedbname imizi aşağıdaki
gibi değiştirmeliyiz.

remotedbname=gercek,@//bizim_sid

Buradaki bizim_sid, tnsnames.ora dosyasındaki tns ismidir.

Bu noktadan sonra bağlantının shared veya dedicated olması oracle client tnsnames dosyasına bağlıdır.

Dedicated için, aşağıdaki gibi bir tnsnames.ora tanımlaması olabilir.
Burada "SERVER=dedicated" olan bölümü "SERVER=shared" yaparsak bağlantı shared oluşturulmaya çalışılır..
Böylece her kullanıcıya, kendini bilgisayarıdaki tnsnames.ora da gerekli ayarları yaparak,
shared mı yoksa dedicated mı bağlantı yapacağı tanımlanabilir.

bizim_sid=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=bizim_server_name_veya_ip)
(PORT=1521)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SID=BIZIM_SID)
)
)


Burada anlattıklarıma temel olan oracle versiyonları 10g ve 11g.
Ayrıca ASMM(Automatic Shared Memory Management 10g) veya
AMM(AutomaticMemory Managemet 11g) özelliklerinin aktif olduğunu varsaydım.
Bu varsayımımım yanlışsa, large_pool değerinin 50 mb civarı olarak, shared server konfigurasyonundan önce
ayarlanması gereklidir.Bu değer de duruma göre arttırılabilir.

Daha eski versiyonlar için farklı database configurasyonu gerekli olabilir.

Daha fazla bilgi için aşağıdaki bağlantılar da incelenebilir.

http://barisakverdi.blogspot.com/2010/10/oracle-shared-server-opsiyonu.html
http://barisakverdi.blogspot.com/2010/10/oracle-shared-server-konfigurasyonu.html
http://download.oracle.com/docs/cd/B28359_01/server.111/b28310/manproc001.htm
http://download.oracle.com/docs/cd/B10500_01/network.920/a96580/connect.htm
http://download.oracle.com/docs/cd/B10500_01/network.920/a96580/mts.htm
http://www.dba-oracle.com/t_mts_multithreaded_servers_shared.htm

Hiç yorum yok:

Yorum Gönder