Oracle Data Buffer

haolinhappy發表於2016-08-08
        看到有人說  {大於5倍的databuffer的2%的表 就直接全部走物理讀}    重溫下 databuffer        這裡沒有解決問題,databuffer倒是清楚了不少  什麼條件下走物理讀待解。
 

Data Buffer是什麼

    Data Buffer是oracle的資料快取。位於SGA中。當Oracle從硬碟上讀取了一段應用資料後,會把這段資料存在Data Buffer中。因為Oracle認為如果一個資料被使用過,那麼下次使用它的可能性會很大,所以放在快取中,下次就可以直接從快取中提取,不必去從硬碟中提取,因為計算機對記憶體的訪問速度遠遠高於硬碟。Oracle在讀取一個資料的時候預設的順序也是先查詢Data Buffer,如果找不到才去硬碟中查詢。這個過程中,如果找到了就叫buffer cache hit 。 Oracle術語中DCHR就是指 buffer cache hit ratio。 這個值越高,說明相對的效能越好。

Data Buffer的種類


    初學者可能認為資料庫中只有一個 Data Buffer,但其實不是這樣的。 oracle中至少應該有7種data buffer。這從下面的命令可以看出來

點選(此處)摺疊或開啟

  1. SQL> show parameter cache
  2.   
  3. NAME TYPE VALUE
  4. ------------------------------------ ----------- ------------------------------
  5. db_16k_cache_size big integer 0
  6. db_2k_cache_size big integer 0
  7. db_32k_cache_size big integer 0
  8. db_4k_cache_size big integer 0
  9. db_8k_cache_size big integer 0
  10. db_cache_advice string ON
  11. db_cache_size big integer 0
  12. db_keep_cache_size big integer 0
  13. db_recycle_cache_size big integer 0
  14. object_cache_max_size_percent integer 10
  15. object_cache_optimal_size integer 102400
  16. session_cached_cursors integer 20
       其中db_nk_cache_size這一部分,n的值有2,4,8,16,32 一共5種,對應的也就應該有5種data buffer。同時db_cache_size,   db_keep_cache_size,  db_recycle_cache_size這裡又有3個data buffer。但是其實 db_cache_size所對應的data buffer和 前面提到的5個nk  buffer中的某一個data buffer是同一個。所以我們一共有7種 data buffer。不過對於大多數oracle 資料庫,雖然可以存在7種 data buffer,但通常情況下只會設定一個 data buffer. 下面可以一一觀察一下這幾種data buffer。

    db_nk_cache_size

    在Oracle中,可以存在五種不同的 資料塊尺寸。這些尺寸是2K,4K,8K,16K,32K。 其中,system表空間所使用的資料塊尺寸叫做標準塊尺寸。由引數 db_block_size指定。對於非system的表空間,在建立表空間的時候可以指定非標準的資料塊尺寸。當oracle讀取資料的時候,如果讀取的block所在的表空間的塊尺寸為32K,那麼這個資料讀取之後就只能放到db_32k_cache_size這個引數對應的 data buffer中去。無法放到別的中。 所以如果你建立了一個block  為nk大小的表空間,那麼你就一定要設定 db_nk_cache_size這個data buffer。

    db_cache_size

    我們知道Oracle可以存在不同的塊尺寸,但其中有一個預設的標準塊尺寸,也就是system使用的塊尺寸,由db_block_size指定。那麼這裡的db_cache_size就制定了預設的塊尺寸的data buffer的大小。也就是說,它跟前面的 nk中的標準塊尺寸快取是同一個。 不過要注意的是,這兩個引數只可以設定一個。


    db_keep_cache_size

這個引數對應的data buffer的性質是,如果一個資料物件load進了該快取,就不會被交換出去了。 某些時候我們希望一些資料物件永久駐在快取中,就可以採用這個data buffer。


    db_recycle_cache_size

    該快取中的資料被使用完會立即清除


Data Buffer 中的資料塊訪問


    這裡主要指預設塊大小的data buffer。data buffer中有兩個連結串列,一個是寫連結串列,一個是空閒連結串列。寫連結串列上的buffer是將要被寫入資料檔案的,而空閒連結串列則記錄著可用的Data Buffer。 空閒連結串列採用LRU管理。Oracle訪問過一個資料塊後會把他放在空閒連結串列的MRU端,當需要從硬碟讀資料進入data buffer的時候,則從LRU端分配記憶體。但是有一個特例要注意,就是全表掃描。

    

    全表掃描時的data buffer

    在全表掃描的時候,oracle預設認為這些讀入的資料不會再次被使用了,所以就把這些資料塊放到空閒連結串列的LRU端。但有的時候,其實我們希望這些資料被再次使用,那麼就希望把這些資料放在MRU端,這樣你需要在建立表的時候指定cache引數。

一些相關的引數和檢視

    db_cache_advice  v$db_cache_advice

    db_cache_advice有兩個值,on和   off。 當為true的時候,oracle會根據執行的統計資訊等為data buffer的大小做出一些調整建議,建議資訊就在 v$db_cache_advice中。

該檢視的列說明:


id data buffer的ID 1-8。 其中7是db_keep_cache_size 8是db_recycle_cache_size
name data buffer的名稱
BLOCK_SIZE 緩衝池 block size (位元組為單位)
ADVICE_STATUS 建議器的狀態,也就是db_cache_advice的狀態。on為開啟,off為關閉。如果關閉,則資料是上次的
SIZE_FOR_ESTIMATE 假設的(預測)cache大小(M 為單位)  
ESTD_PHYSICAL_READ_FACTOR
當cache為SIZE_FOR_ESTIMATE所估算的大小時,物理讀的次數與當前物理讀的比率


        在使用這個檢視的時候重點關注ESTD_PHYSICAL_READ_FACTOR 這一項。 隨著SIZE_FOR_ESTIMATE的不斷增大,這個值會不斷變化,代表著物理讀越來越小。

我們要找的是哪個變化不再明顯的點。這時候就意味著 data buffer已經足夠大了,已經不在是一個影響物理讀的決定因素了。


    v$buffer_pool

    該檢視記錄了資料庫中所有 data buffer的詳細資訊。

欄位

資料型別

描述

ID

NUMBER

緩衝池ID,和上面檢視描述相同。

NAME

VARCHAR2(20)

緩衝池名稱

BLOCK_SIZE

NUMBER

緩衝池塊尺寸(位元組為單位)

RESIZE_STATE

VARCHAR2(10)

緩衝池當前狀態。

STATIC:沒有被正在調整大小

ALLOCATING:正在分配記憶體給緩衝池(不能被使用者取消)

ACTIVATING:正在建立新的快取塊(不能被使用者取消)

SHRINKING:正在刪除快取塊(能被使用者取消)

CURRENT_SIZE

NUMBER

緩衝池大小(M為單位)

BUFFERS

NUMBER

當前快取塊數

TARGET_SIZE

NUMBER

如果正在調整緩衝池大小(即狀態不為STATIC),這記錄了調整後的大小(M為單位)。如果狀態為STATIC,這個值和當前大小值相同。

TARGET_BUFFERS

NUMBER

如果正在調整緩衝池大小(即狀態不為STATIC),這記錄了調整後的快取塊數。否則,這個值和當前快取塊數相同。

PREV_SIZE

NUMBER

前一次調整的緩衝池大小。如果從來沒有調整過,則為0。

PREV_BUFFERS

NUMBER

前一次調整的快取塊數。如果從來沒有調整過,則為0。



        v$buffer_pool_statistics

該檢視記錄了各個data buffer的統計資訊,於上面檢視的不同就是該檢視主要會包含一些 read次數等資訊,而上一個檢視主要是 data buffer的大小。

        v$bh

該檢視記錄了資料物件在data buffer中的資訊,精細到資料塊級別.


       


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27785870/viewspace-2123164/,如需轉載,請註明出處,否則將追究法律責任。

相關文章