PERFORMANCE TUNİNG (SHARED POOL AYARLARI)


SGA Oracle ilk açıldığında instance’ın ilk yüklendiği ve başladığı yerdir.

11

SGA yı adım adım incelersek,

11

Shared pool Shared_pool_size parametresi ile düzenlenerek kullanılır.

İçinde Libraray cahe,data dictionary cache ve UGA barındırırır.Libaray cache de Execution plan,parse edilmiş kodlar bulunur.

Data dictionary cache de,Tablo tanımaları ve privillege gibi bilgiler bulunur.

UGA ise Large pool configüre edilmemişse Oracle Shared Server Session bilgisini barındırır.

Shared Pool’un boyut ayarı SHARED_POOL_SIZE ile olmaktadır.

Shared pool size ‘ın default değeri 8 MB’dir.İstenirse değiştirilebilinir.

11

Library cache sahred SQl ve PL/SQL bilgilerini içerir.Örneğin compile edilmiş Procedurler,Triggerlar..içerir.Bir LRU algoritmasına göre yönetimi gerçekleşir.Server’ın bir Sql’e ihtiyacı olduğunda cache bulunan sql den bu işlemi gerçekleştirip tekrar parse etmesine gerek kalmadan bu işlemi yapmaktadır.

Library Cache Tuning

 

Library cache ihtiyaç duyduğunda bir sql cümlesini cache ten alıp parse etmeden getirir ama istenen cümle eğer cache te bulunmuyorsa ,ilgili cümle parse edilir ve daha sonra library cache’ e yerleştirilir.

 

Fragmentasyonu önlemek için Birkaç konuya dikkat etmek gerekir.

Large Memory için gerekli yer ayrılmalıdır.

Gerekli Large Objelerini pinlemek gerekir.

Bilinmeyen PL/SQL bloklarını elimine etmek gerekir.

Library cache ile ilgili bilgileri ağağıdaki sorgudan alabiliriz.

SQL > select namespace,gets,pins,reloads,gethits,pinhits from V$LIBRARYCACHE

NAMESPACE GETS PINS RELOADS GETHITS PINHITS
SQL AREA 12213 39244 16 12024 38846
TABLE/PROCEDURE 12796 12803 0 12536 12432
BODY 2 1 0 0 0
TRIGGER 5 5 0 0 0
INDEX 3783 3752 0 3741 3710
CLUSTER 193 258 0 186 250
OBJECT 0 0 0 0 0
PIPE 0 0 0 0 0
JAVA SOURCE 0 0 0 0 0
JAVA RESOURCE 0 0 0 0 0
JAVA DATA 0 0 0 0 0

Gets : Sorgu sonucu dönen uygun değerlerin toplamı,

Pins : Her bir area için ,SQL statemntların ve procedurlerin execute sayısını gösterir,

11

 

SGASTAT tüm SGA yapısının boyutunu gösterir.

 

V$SQLAREA bütün shared cursorların ilk 1000 karakterleriyle birlikte bilgisini verir.

 

V$SQLTEXT bütün sql ler için satır satır bilgileri kısaltmaksınız verir.

 

V$DB_OBJECT_CACHE cache lenmiş Tablo,Synonim bilgilerini gösterir.

 

Shared Pool için aktivite istatistiği ve efektif kullanım yüzdesi gösteren örnek bir sql yazmak istersek.

 

SQL> select gethitratio

from v$librarycache

where namespace = ‘SQL AREA’;

 

SQL> select sql_text, users_executing,

executions, loads

from v$sqlarea;

 

SQL> select * from v$sqltext

where sql_text like

’select * from hr.employees where %’;

 

Burada gethitratio parametresi bize cursurların share edilip edilmediğ hakkında kısa bir bilgi verir.Bu bilgi % cinsindendir.Genelde bu değer % 90 ın üzerinde olmalıdır.

11

 

Yukarıda Bir porsedürün 4 defa çalışma bilgisi görünmektedir.

 

SQL> select sum(pins) “Executions”, sum(reloads)

“Cache Misses”, sum(reloads)/sum(pins)

from v$librarycache;

 

Executions Cache Misses SUM(RELOADS)/SUM(PINS)
71120 16 0.000224971878515186

 

Bu Örneğe baktığımızda Bilmemiz gereken reloadslar pinlerin % 1 den daha ufak olmalıdır.Eğer % 1 ‘in üzerine çıkarsa,shared_pool_size parametresini büyütmeliyiz.

 

GEÇERSİZ KILANAN CÜMLELER

 

Bunun anlamı bazen SQL Areada bulunan cümleler geçersiz olabilmektedir.Bunu engellemenin yolu ilgili cümlenin tekrar execute ve reparse edilmesidir.

 

SQL > select count(*) from hr.employees;

 

SQL > select namespace,pins,reloads,invalidations

from v$librarycache;

 

NAMESPACE PINS RELOADS INVALIDATIONS

——————— ———- ———- ————-

SQL AREA 1616 12 0

 

SQL > ANALYZE TABLE hr.employees COMPUTE STATISTICS;

 

SQL > select count(*) from hr.employees;

 

SQL > select namespace,pins,reloads,invalidations

from v$librarycache;

 

 

NAMESPACE PINS RELOADS INVALIDATIONS

————— ———- ———- ————-

SQL AREA 1688 14 3

 

Bir tablo yada view alter edildiğinde yada bir procedur yada package recompile edildiğinde  birbirine bağlı sql areaları invalid duruma düşecektir.

 

LIBRARY CACHE SIZING

 

Stored objeler için global bir space Ayarlamak gerekir.

 

Çok kullanılan sql cümleleri için memory de bir size ayarlamak gerekir.

 

Çok kullanılan sql cümlelerini muhafaza etmek gerekir.

 

Mesela büyük Procedurleri parçalayıp daha ufak Package’ler haline geitrmek gerekir.

 

Çok büyük Sql cümleleri veya triggerlar için Shared Pool içinde belli bir miktar ayırarak,kullanıma açabilirz.Genelde Sahred pool’un % 10 u kadar olmalıdır.

 

Cache üzerinde ne kadarlık bir sharable memory ihtiyacı var diye bakmak istersek,

 

SQL> select sum(sharable_mem)

from V$DB_OBJECT_CACHE;

 

SUM(SHARABLE_MEM)

—————–

379600

 

SQL> select sum(sharable_mem)

from V$SQLAREA where executions > 5;

 

SUM(SHARABLE_MEM)

—————–

381067

 

SQL > select * from V$SHARED_POOL_RESERVED; bize gerekli bilgileri vermektedir.

 

LARGE MEMORY GEREKSİNİMLERİ

11

 

PL / SQL operasyonları için ne kadarlık bir başlangıç değeri ayıracağımız SHARED_POOL_RESERVED_SIZE gösterir.

Buradaki SHARED_POOL_RESERVED_SIZE normal olarak SHARED_POOL_SIZE’ın % 10’u kadar olmalıdır.

 

SQL> select * from v$db_object_cache

where sharable_mem > 10000

and (type=‘PACKAGE’ or type=‘PACKAGE BODY’ or

type=‘FUNCTION’ or type=‘PROCEDURE’)

and KEPT=‘NO’;

 

Bu cümle bize libraray cache te saklanamamış sql cümleri hakkında bilgi verir.

 

SQL> EXECUTE dbms_shared_pool.keep(‘package_name’); Library cache te saklamak içinde bu cümleciği kullanabiliriz.

 

Yukarıda execution ile bu sql cümlelerini saklamış oluruz.

 

SQL> select sql_text from v$sqlarea

where command_type = 47

and length(sql_text) > 500; yazarak sistemde büyük procedurleri bulmuş olururz.

 

Bunu istersek daha ufak parçalarda package haline getirebiliyorsak getirmeliyiz.

 

SQL> declare x number;

begin x := 5;

end;

 

SQL> declare /* KEEP_ME */ x number;

begin x := 5;

end;

 

SQL> select address, hash_value

from v$sqlarea

where command_type = 47 and sql_text like ’%KEEP_ME%’;

 

 

Dictionary Cache Tuning

 

Dictionary Cache Tuning’e tuning uygulamak içinde yapabileceğimiz şeyler vardır.Bu cache sistem hakkında bilgi aldığımız viewları barındırmaktadır.

 

Gets:Objeler üzerindeki request sayısı

Getmisses:Cacheteki kayıp Request sonuçlarının sayısı

11

 

SQL> select parameter, gets, getmisses

from v$rowcache;

 

PARAMETER GETS GETMISSES

————————– ——— ———

dc_objects 143434 171

dc_synonyms 140432 127

 

getmisses ların toplamının getslerin toplamına oranı % 15 leri geçmemelidir.Geçerse shared pool size parametresi arttırılmalıdr.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: