oracle中如何設定buffer cache

來源:互聯網
上載者:User

buffer cache的設定隨著Oracle版本的升級而不斷變化。Oracle 8i下使用db_block_buffers來設定,該參數表示buffer cache中所能夠包含的記憶體資料區塊的個數;Oracle 9i以後使用db_cache_size來設定,該參數表示buffer cache的總共的容量,可以用位元組、KB、MB為單位來進行設定。而到了Oracle 10g以後則更加簡單,甚至可以不用去單獨設定buffer cache的大小。因為Oracle 10g引入了ASMM(Automatic Shared Memory Management)這樣一個可以進行自我調整的組件,該組件可以自動調整shared pool size、db cache size等SGA中的組件。只需要設定sga_target參數,再設定statistics_level為typical或all,則其他組件就能夠根據系統的負載和曆史資訊自動地調整各個部分的大小。

從Oracle 8.0以後,Oracle提供了三種類型的buffer cache,分別是default、keep、recycle。keep和recycle是可選的,default必須存在。Oracle 8i以後使用db_cache_size設定default池、db_keep_cache_size設定keep池、db_recycle_cache_size設定recycle池。

通常將經常訪問的對象放入keep類型的buffer cache裡,而將不常訪問的大表放入recycle類型的buffer cache裡。其他沒有指定buffer cache類型的對象都將進入default類型的buffer cache裡。為對象指定buffer cache類型的方法如下:

SQL> create table test (n number) storage (buffer_pool keep);

SQL> alter table test storage (buffer_pool recycle);

如果沒有指定buffer_pool短語,則表示該對象進入default類型的buffer cache。

這裡要說明的是,從名字上看,很容易讓人誤以為這三種buffer cache提供了三種不同的管理記憶體資料區塊的機制。但事實上,它們之間在管理和內部機制上沒有任何的區別。它們僅僅是為DBA們提供了一個選擇,就是能夠將資料庫物件分成“非常熱的”、“比較熱的”和“不熱的”這三種類型。因為資料庫中總會存在一些“非常熱”的對象,它們頻繁地被訪問。而如果某個時候系統偶爾做了一次大表的全表掃描,就有可能將這些對象清除出記憶體。為了防止這種情況的發生,我們可以設定keep類型的buffer cache,並將這種非常熱的對象都移入keep buffer cache中。同樣的,資料庫中也總會有一些很大的表,可能每月為了產生一張報表,而只需要訪問一次就可以了。但有可能就是這麼一次訪問,就將大部分的記憶體資料區塊清除出了buffer cache。為了避免這種情況的發生,可以設定recycle類型的buffer cache,並將這種偶爾訪問的大表移入recycle buffer cache。

毫無疑問,如果我們要設定這三種類型的buffer cache,則需要自己研究並根據資料庫中的對象進行分類,計算這些對象的大小以後,從而才能夠正確的把它們放入不同的buffer cache。但是,不管怎麼說,設定這三種類型的buffer cache只能算是最低層次的最佳化,也就是說在我們沒有任何辦法的情況下,可以考慮設定它們。但是如果我們能夠對某條讀取了過多資料區塊的SQL語句進行調優的話,使其buffer gets降低50%的話,就會比設定多個buffer cache要好得多了。

Oracle 9i以後還提供了可以設定多種資料區塊尺寸(2、4、8、16 或 32)的buffer cache,以便存放不同資料區塊尺寸的資料表空間中的對象。使用初始化參數db_Nk_cache_size來指定不同資料區塊尺寸的buffer cache,這裡的N就是2、4、8、16 或 32。建立資料庫時,使用初始化參數db_block_size所指定預設的標準資料區塊尺寸,標準資料區塊尺寸用於system資料表空間。然後可以指定最多4個不同的、非標準資料區塊尺寸的資料表空間。每種資料區塊尺寸的資料表空間必須對應一種不同尺寸的buffer cache,否則不能建立不同資料區塊尺寸的資料表空間。

SQL> create tablespace tbs_test_16k

2 datafile 'C:\oracle\oradata\ora92\tbs_test_16k.dbf' size 10M

3  blocksize 16k;

create tablespace tbs_test_16k

*

ERROR 位於第 1 行:

ORA-29339: 資料表空間塊大小 16384 與配置的塊大小不匹配

SQL> show parameter db_16k_cache_size

NAME                    TYPE      VALUE

-------------------   -----------   ----------

db_16k_cache_size         big integer   0

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.