Result Cache nedir ve nasıl kullanılır ?

13 Oca by Ahmet Duruöz

Result Cache nedir ve nasıl kullanılır ?

Result Cache , Shared Global Area (SGA) içindeki shared pool alanındaki , bellek alanıdır. Bu alanda tekrar kullanım için veritabanı sorgu sonucu veya sorgu bloğu tutulur. Cache’lenmiş bloklar , sql cümleleri ve stale durumda olmayan oturumlar tarafından paylaşılır.

Result Cache kullanımı küçük ve sık erişim gerektiren tablolar için idealdir. Büyük tablolar için kullanılması sıkıntı yaratabilir. Fakat sürekli sorgulanan kullanıcı bilgileri, parametre gibi tablolarda çok ciddi kazanım sağlayacaktır.

Result Cache , Oracle Database 11g Release 1 versiyonuyla gelmiş olup , varsayılan olarak enable durumdadır.

Result Cache durumunu aşağıdaki sorgu ile öğrenebiliriz .

SQL> SELECT dbms_result_cache.status() FROM dual;

DBMS_RESULT_CACHE.STATUS()
--------------------------------------------------------------------------------
ENABLED

Result cache ile ilgili iki önemli parametrenin set edilmesinde fayda var. result_cache_max_size ve shared_pool_size için aşağıdaki gibi bir değer atamanız , sistemi dar boğaza sokmamak için gereklidir. Belleğinize göre yada ihtiyacınıza göre bu parametreleri ayarlayabilirsiniz.

SQL> ALTER SYSTEM SET result_cache_max_size = 2G SCOPE = SPFILE;
SQL> ALTER SYSTEM SET shared_pool_size = 2G SCOPE = SPFILE;

Sonrasında veritabanını yeniden başlatmak gerekecektir.

Result Cahce kullanımı için sorguya /*+ RESULT_CACHE */ hinti eklemek gerekmektedir. Örnek sorgu aşağıdaki gibidir.

SQL> SELECT /*+ RESULT_CACHE */
        p.prod_name,
         SUM (s.amount_sold) AS total_revenue,
         SUM (s.quantity_sold) AS total_sales
    FROM sales s, products p
   WHERE s.prod_id = p.prod_id
GROUP BY p.prod_name;

Result cahce kullanımı varsayılan olarak manuel yönetilmektektedir. Dilersek bunu zorlayarak otomatik kullanılmasını da sağlayabiliriz. result_cache_mode parametresinin değerine göre bu kullanım mümkündür. Varsayılan olarak MANUAL şeklinde olup dilersek FORCE yaparak result cache kullanımına zorlayabiliriz sistemi. Kullanım durumu result_cache_max_size parametresi ile sınırlandırılmaktadır.

result_cache_mode parametresini aşağıdaki gibi değiştirebiliriz.

SQL> alter system set result_cache_mode=FORCE scope=both sid='*';

System altered.

result_cache_mode parametresi FORCE yapıldığında bile eğer sorguda NO_RESULT_CACHE hinti belirtildiyse , result cache kullanılmayacaktır. Hint , daima parametreden daha üstündür.

Cache’lenmiş nesneleri sorgulamak :

Aşağıdaki sorgu ile result cache kullanılan nesneleri tespit edebilirsiniz.

SQL>  SELECT name,
         TYPE,
         cache_id,
         row_count
    FROM v$result_cache_objects
ORDER BY creation_timestamp;

Result cache bilgilerinin bazı durumlarında temizlenmesi gerekebilir. Mevcut cache bilgilerini aşağıdaki şekilde temizleyebilirsiniz.

SQL>   BEGIN
  DBMS_RESULT_CACHE.FLUSH;
  END;
  /

PL/SQL procedure successfully completed.

Result Cache kullanıldığında bellek tarafındaki durumun da izlenmesi gerekir. Bu izlemeyi Result Cache Memory Report ile sağlamak mümkündür. Bu raporu aşağıdaki şekilde oluşturabilirsiniz. Bu rapor sayesinde anlık olarak bellek kullanımını ve ayarlamalarını görebiliriz.

SQL> set serveroutput on
SQL> exec dbms_result_cache.memory_report(TRUE);
R e s u l t   C a c h e   M e m o r y   R e p o r t
[Parameters]
Block Size          = 1K bytes
Maximum Cache Size  = 52448K bytes (52448 blocks)
Maximum Result Size = 2622K bytes (2622 blocks)
[Memory]
Total Memory = 174336 bytes [0.004% of the Shared Pool]
... Fixed Memory = 14880 bytes [0.000% of the Shared Pool]
....... Memory Mgr = 200 bytes
....... Cache Mgr  = 208 bytes
....... Bloom Fltr = 2K bytes
.......  = 4120 bytes
....... RAC Cbk    = 5408 bytes
....... State Objs = 2896 bytes
... Dynamic Memory = 159456 bytes [0.004% of the Shared Pool]
....... Overhead = 126688 bytes
........... Hash Table    = 64K bytes (4K buckets)
........... Chunk Ptrs    = 24K bytes (3K slots)
........... Chunk Maps    = 12K bytes
........... Miscellaneous = 126688 bytes
....... Cache Memory = 32K bytes (32 blocks)
........... Unused Memory = 31 blocks
........... Used Memory = 1 blocks
............... Dependencies = 0 blocks (0 count)
............... Results = 1 blocks
................... SQL     = 1 blocks (1 count)

PL/SQL procedure successfully completed.

Result Cache ile ilgili bilgi alabileceğiniz diğer bir view ise v$result_cache_statistics şeklindedir. Bu görüntüden de mevcut durum ile ilgili bilgi toplanabilir.

SQL> select name, value from v$result_cache_statistics;

NAME VALUE
------------------------------ --------------------
Block Size (Bytes) 1024
Block Count Maximum 3072000 <<<<<<<<<<< 3 GB Result Cache maximum size
Block Count Current 1038720 <<<<<<<<<<< 1 GB is currently used
Result Size Maximum (Blocks) 153600
Create Count Success 1047967
Create Count Failure 80
Find Count 1312482070
Invalidation Count 9056
Delete Count Invalid 9402
Delete Count Valid 0
Hash Chain Length 237-269
Find Copy Count 1312537867
Latch (Share) 0

 

Loading

One Comments “Result Cache nedir ve nasıl kullanılır ?

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir