Pages

26 Aralık 2011 Pazartesi

Oracle 11g de PGA ve SGA tavsiyecileri arasında bellek dağıtımı hesaplamaları ve AMM

Oracle 11g de PGA ve buffer cache tavsiyecileri arasındaki bellek dağıtım prosedürü daha az karmaşıktır. Ortalama direkt IO zamanını hesaplamak veya PGA tavsiyecisi verisini bytes değerinden tamamlanma süresine çevirmek gerekli değildir, çünkü V$PGA_TARGET_ADVICE view görünümü zaten tamamlanma süresi beklentilerini dahil etmektedir. Bu sebeple Oracle 10g den daha az karışık olan aşağıdaki sorgu kullanılarak her iki tavsiyeci direkt olarak kıyaslanabilmektedir:

SQL> WITH db_cache_times AS
(SELECT current_size current_cache_mb,
size_for_estimate target_cache_mb,
(estd_physical_read_time - current_time)
cache_secs_delta
FROM v$db_cache_advice,
(SELECT size_for_estimate current_size,
estd_physical_read_time current_time
FROM v$db_cache_advice
WHERE size_factor = 1
AND name = 'DEFAULT' AND block_size = 8192)
WHERE name = 'DEFAULT' AND block_size = 8192),
pga_times AS
(SELECT current_size / 1048576 current_pga_mb,
pga_target_for_estimate / 1048576 target_pga_mb,
estd_time-base_time pga_secs_delta
FROM v$pga_target_advice ,
(SELECT pga_target_for_estimate current_size,
estd_time base_time
FROM v$pga_target_advice
WHERE pga_target_factor = 1))
SELECT current_cache_mb||'MB->'||target_cache_mb||'MB' Buffer_cache,
current_pga_mb||'->'||target_pga_mb||'MB' PGA,
pga_secs_delta,cache_secs_delta,
(pga_secs_delta+cache_secs_delta) total_secs_delta
FROM db_cache_times d,pga_times p
WHERE (target_pga_mb+target_cache_mb)
<=(current_pga_mb+current_cache_mb)
AND (pga_secs_delta+cache_secs_delta) <0
ORDER BY (pga_secs_delta+cache_secs_delta);

Buffer Cache    PGA          Pga Time     Cache Time Total Time
Change          Change       Delta (s)    Delta (s)  Delta (s)
---------------- ------------ ----------- ----------- -----------
1024MB->1280MB 1792->896MB     0         -2,783          -2,783
1024MB->1280MB 1792->1344MB    0         -2,783          -2,783
1024MB->1216MB 1792->896MB     0         -2,152          -2,152
1024MB->1216MB 1792->1344MB    0         -2,152          -2,152
1024MB->1152MB 1792->1344MB    0         -1,475          -1,475
1024MB->1152MB 1792->896MB     0         -1,475          -1,475
1024MB->1088MB 1792->1344MB    0           -798           -798
1024MB->1088MB 1792->896MB     0           -798            -798

Bu örnekte, tavsiyecinin verdiği bilgi; tamamlanma süresinde yumuşak bir azalmanın, PGA dan SGA ya bellek transferi ile erişebileceğini  göstermektedir. Buffer cache değerinin 256 MB arttırılması ile 2,783 saniyelik bir kazanç meydana gelirken, PGA da bu miktarda bir azalmanın herhangi bir kazancı bulunmamaktadır.

Oracle tavsiyecilerinden veri sağlandıkça bu tavsiyeler kullanışlı ve iyidir. Ayrıca, veritabanı sürümünün Oracle 10g olması durumunda, hesaplamalar geçici segment IO ortalama blok boyutu ve tamamlanma süreleri ile olmaktadır.  Tavsiyeci bilgisinin sıfırlandığı bazı durumlarda vardır, örneğin, DB_CACHE_ADVICE başlangıç parametresi değerinin değiştirildiği zaman. Eğer tavsiyecilerden birisi sıfırlanırsa, herbiri farklı zaman dilimi için tavsiyeler  oluşturulabilir ve kombine edilmiş bu tür analizler yanıltıcı olabilir. Eğer şüphe içindeyseniz,  veritabanını yeniden başlattıktan sonra tavsiyeci bilgisini analiz etmeniz gerekmektedir.

Eğer özetlenen prosedür az biraz karışık ise, Oracle 11g den itibaren PGA, buffer cache ve SGA nın diğer alanlar arasındaki talebe göre bellek paylaşımı hesaplamasının Oracle’a devredilebildiğini bilmek kullanışlı gelecektir. Oracle çeşitli bellek alanları arasındaki talebi belirleyecek ve periyodik aralıklarla bellek tahsisini genişletecektir.  Bu özellik Otomatik Bellek Yönetimi  (Automatic Memory Management -AMM) olarak adlandırılmaktadır.

AMM’in devreye alınması  Oracle Enterprise Manager konsolundan veya direkt olarak ilgili parametrelerin ayarlanması ile olabilmektedir. AMM’in manuel olarak devreye alınması:

1.       MEMORY_MAX_TARGET için MEMORY_TARGET için muhetemel en üst değeri  saptayan bir değer tanımlanır. Bunun için işletim sistemi seviyesinde yeterli miktarda bellek gerekmektedir. Linux sistemlerde  MEMORY_MAX_TARGET  parametresini en azından boyutlandırmak için /dev/shm in yapılandırılması gerekmektedir. Veritabanının, bu değişikliği işleme sokması için yeniden başlatılması gerekmektedir.
2.        İsteğe bağlı olarak, SGA_TARGET, PGA_AGGREGATE_TARGET ve diğer belek yapılandırma parametreleri sıfır olarak ayarlanır (SHARED_POOL_SIZE gibi). AMM etkinken eğer bu değerlerden herhangi birisi sıfır dışında bir değere sahipse, parametre değerleri  tanımlanan bellek bölgesi için minimum boyutlarda tanımlanır.
3.        MEMORY_TARGET değeri, SGA ve PGA arasında paylaşılmak istenen toplam bellek miktarı olarak ayarlanır.

Oracle  Enterprise Manager içinden  AdvisorCentral > MemoryAdvisors sayfasından AMM devreye alınabilir.

AMM sorunları hakkında düşünceler

AMM den elde edilen potansiyel performans kazancı oldukça önemlidir. Ancak, bazı durumlar altında algoritma yetersiz kalabilmektedir. AMM, ASMM ye etki eden pek çok sorun ile karşı karşıya kalabilmektedir.  Bunlardan bazıları;

·         Eğer işyükünde bir bocalama olursa veya işyükleri sıklıkla değişirse, bu durumda bir sorun olabilir. Mesela, sort işlemi yoğun ve okuma işlemi yoğun işlemler arasında periyodik olarak değişim gösteren bir işyükü,  PGA ve SGA arasında sıksık bellek geçişine sebebiyet verebilir.  Bunun sonucunda da, o an yürütülen işyüküne nazaran henüz bitmiş işyükü için sıklıkla bir bellek yapılandırması olur.
·         Eğer tek bir oturum aşırı yüksek miktarda bellek işgale ederse, bellek kıtlığı meydana gelebilir. Mesela, PL/SQL rutinleri, paylaşımlı sunucu(shared server)  modunda çalışırken büyük PL/SQL tabloları oluşturarak, “large pool” lehine paylaşımlı havuzdan çekilen belleğe sebebiyet verebilir. AMM etkinken de aynı sorun olabilir.
·         Bütün bellek bölgeleri otomatik olarak boyutlandırılmamıştır. Belirgin olarak varsayılan değere sahip olmayan buffer havuzları gibi ASMM’den hariç tutulan aynı bölgelerde, aynı zamanda AMM kapsama alanı dışındadır. Mesela  KEEP veya RECYCLE havuz oluşturulursa, bu paylaşımlı havuzların  yeterli büyüklükte olduğundan emin olunması gerekmektedir, çünkü bunlar AMM tarafından genişletilmeyecektir.
·         AMM, Linux Huge pages ile uyumlu değildir. Linux HugePages 32 bit ve 64 bit sistemlerde 4K veya 16K varsayılan boyutlarından daha büyük bellek sayfalarına erişimi sağlamaktadır. HugePages, geniş bellek adresi alanları ile uğraşırken öenmli ve faydalı avantajlar sağlar.
·         AMM kullanırken SGA kilitlenemez. Nadir durumlarda, SGA belleğini diske “paged out” durumlarından korumak avantajlı olabilir, ancak Oracle’ın bu amaç için hizmete sunduğu LOCK_SGA seçeneği ile AMM tarafından kullanılan bellek modelini kullanmak bağdaşmaz. 

0 yorum:

Yorum Gönder