15 February 2006

Oracle Block Buffer Cache

Performans konusunda yapılan çalışmaların en başında, fiziksel olarak diske erişimin minimize edilmesi gelir.Bu da, çok istenen verilerin bellekte tutularak, istenildiğinde buradan kullanılması ile gerçekleşir.Bu noktada Oracle’nin sunduğu özelliklerden biri block buffer cache yapısıdır.Bu yapı bir nevi cache yapısıdır.SGA(System Global Area) içinde bulunur.

Oracle içinde veriler blocklarda tutulur.Block buffer cache de, Oracle’nin verileri okuduktan sonra veya yazmadan önce tutulduğu yerdir.

Burada kullanılan algoritma LRU(Last Recently Used, -En Son Kullanılan-) algoritmasıdır.Bu sayede en fazla istenen veriler, herhangi bir istenme durumunda daha hızlı getirilmesi için burada tutulur.Bunun için oraclenin gizemli X$ tablolaından faydalanılır.Şöyleki;

Öncelikle bir tablo oluşturalım.

BEGIN
CREATE TABLE oracle_oracle(x NUMBER);
INSERT INTO oracle_oracle (x) VALUES (90);
COMMIT;
END;


Bu tablonun hangi block içinde bulunduğu bulmak gerekir öncelikle.Şuan çalışılan schema SYS.

SELECT ext.block_id
FROM   dba_extents ext
WHERE  lower(ext.segment_name) = 'oracle_oracle' AND
ext.owner = 'SYS'
--BLOCK_ID
--40697


Şimdi tabloyu select ile çağıralım.

SELECT x FROM oracle_oracle


Bu select sonucunda oluşan duruma bakalım:

SELECT x.tch
FROM   x$bh x
WHERE  x.dbablk = 40697 AND
x.file# = 1
--istenme sayısı
--TCH
--4


Bir kez daha çağıralım ve sonuca bakalım:

SELECT x FROM oracle_oracle

SELECT x.tch
FROM   x$bh x
WHERE  x.dbablk = 40697 AND
x.file# = 1
--istenme sayısı artıyor
--TCH
--5


Yine istiyoruz

SELECT x FROM oracle_oracle

Son kez bakalım

SELECT x.tch
FROM   x$bh x
WHERE  x.dbablk = 40697 AND
x.file# = 1
--istenme sayısı daha da artıyor
--TCH
--6


Her çağırılışta sayının arttığını, LRU algoritmasının kullanıldığını daha iyi görüyoruz.

Kaynak : Thomas Kyte, One on One Oracle