LRU是Buffer Cache池中的重要鏈表,它的作用我不再詳述,已經有很多相關資料。這次主要和大 家討論下主LRU、輔助LRU的作用。
先來看一個測試。
步1:環境介紹
先來看看Buffer Cache的大小:
SQL> show sga
Total System Global Area 1073741824 bytes
Fixed Size 1284344 bytes
Variable Size 960497416 bytes
Database Buffers 104857600 bytes
Redo Buffers 7102464 bytes
Buffer Cache大小100M。
再來看看測試表大小:
SQL> set linesize 1000
SQL> col segment_name for a30
SQL> SQL> select segment_name,bytes/1024/1024 from dba_segments where segment_name='A3_70M';
SEGMENT_NAME BYTES/1024/1024
------------------------------ ---------------
A3_70M 80
SQL> SQL> select segment_name,bytes/1024/1024 from dba_segments where segment_name='A4_70M';
SEGMENT_NAME BYTES/1024/1024
------------------------------ ---------------
A4_70M 80
兩張測試表,A3_70M、A4_70M,各自大小80M。本來是想把它們兩個大小建為70M的,所以名字帶有 尾碼_70M,但建的大了一點,不過,這無所
謂,不會影響我們的測試結果。
步2:重新整理Buffer Cache池,觀察LRU鏈長度
SQL> alter system flush buffer_cache;
SQL> select CNUM_SET,CNUM_REPL,ANUM_REPL,CNUM_WRITE ,ANUM_WRITE from x$kcbwds;
CNUM_SET CNUM_REPL ANUM_REPL CNUM_WRITE ANUM_WRITE
---------- ---------- ---------- ---------- ----------
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
6238 6238 6219 0 0
6237 6237 6224 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
CNUM_SET CNUM_REPL ANUM_REPL CNUM_WRITE ANUM_WRITE
---------- ---------- ---------- ---------- ----------
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
16 rows selected.
這個視圖返回16行,但只有兩行有資料。其他行都是0,原因是什嗎?
查一下select name from v$latch_children where name ='cache buffers lru chain'; 就可以 知道,我一共有16個cache buffers lru
chain Latch,但只有兩個被使用了。