Showing posts with label block buffer cache. Show all posts
Showing posts with label block buffer cache. Show all posts

11 November 2009

Cache affect In oracle

>sqlplus hr/hr@xe

SQL*Plus: Release 10.2.0.1.0 - Production on ...

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> set autotrace traceonly statistics;

SQL> alter system flush shared_pool;

System altered.

SQL> alter system flush buffer_cache;

System altered.

SQL> select count(*) from table_a where column_a = 1;--first call


Statistics
----------------------------------------------------------
       2224  recursive calls
          0  db block gets
        638  consistent gets
         49  physical reads

          0  redo size
        335  bytes sent via SQL*Net to client
        376  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
         57  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL> select count(*) from table_a where column_a = 1; --second call, cache affect


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          2  consistent gets
          0  physical reads

          0  redo size
        335  bytes sent via SQL*Net to client
        376  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          1  rows processed

SQL>

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