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