查看buffer cache的大?。?br />SQL> SELECT component,current_size,min_size FROM v$sga_dynamic_components;
COMPONENT CURRENT_SIZE MIN_SIZE
---------------------------------------------------------------- ------------ ----------
shared pool 5570035712 5301600256
large pool 67108864 67108864
java pool 67108864 67108864
streams pool 67108864 67108864
DEFAULT buffer cache 1.1409E+10 1.1140E+10
KEEP buffer cache 0 0
RECYCLE buffer cache 0 0
DEFAULT 2K buffer cache 0 0
DEFAULT 4K buffer cache 0 0
DEFAULT 8K buffer cache 0 0
DEFAULT 16K buffer cache 0 0
DEFAULT 32K buffer cache 0 0
Shared IO Pool 0 0
ASM Buffer Cache 0 0
14 rows selected.
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 16512M
sga_target big integer 16512M
SQL> show parameter db_cache_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_cache_size big integer 0
db_cache_size的設(shè)置的值為默認值0,說明沒有設(shè)置大小,用的全是由SGA自動調(diào)整
這里可以看到buffer cache是系統(tǒng)自己自動分配的,大概是10880MB。
舉個例子:
現(xiàn)在改一下
alter system set db_cache_size=200M scope=both;
成都創(chuàng)新互聯(lián)專注于曲江企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城開發(fā)。曲江網(wǎng)站建設(shè)公司,為曲江等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站建設(shè),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
SQL> alter system set db_cache_size=200M scope=both;
alter system set db_cache_size=200M scope=both
*
ERROR at line 1:
ORA-32017: failure in updating SPFILE
ORA-00384: Insufficient memory to grow cache
結(jié)果顯示沒有足夠的內(nèi)存去增加
就是sga_target已經(jīng)就這么大了,都分完了
都分給各個池子了
這時要把DEFAULT buffer cache的值增加
要增加這個buffercache池子的大小的話
首先增加sga的大小
這地方首先說一下思路
首先增加sga_max_size大小
然后再增加sga_target
最后再增加db_cache_size
語句分別為
alter system set sga_max_size=500M scope=spfile;
alter system set sga_target=400M;
alter system set db_cache_size=200M;
其中的scope選項有三個可取值
scope=spfile
表示將參數(shù)值存入spfile文件,即改變oracle的初始化參數(shù)文件內(nèi)容,在重啟數(shù)據(jù)庫后才能生效
scope=memory
表示改變正在內(nèi)存中運行的實例的參數(shù)值,只在內(nèi)存上修改,立即生效,
關(guān)閉實例此值就會丟失而被還原為原已保存的值,因為這個修改并沒有寫入到初始化參數(shù)文件
scope=both
表示將參數(shù)值同時存入spfile和memory,立即生效,因為存入了spfile重啟數(shù)據(jù)庫后仍然有效。
both是默認值,修改靜態(tài)參數(shù)必須使用spfile,動態(tài)參數(shù)三種方式都可以用。
spfile文件的位置
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/10.2.0
/db_1/dbs/spfilejiagulun.ora
為了保護數(shù)據(jù)庫的安全有的參數(shù)進行了保護把它指定為靜態(tài)狀態(tài)
修改值時要加額外參數(shù)并且要數(shù)據(jù)庫重啟才能生效
但大部分參數(shù)是動態(tài)的可以隨時修改隨時生效
sga_max_size是靜態(tài)參數(shù),sga_target和db_cache_size是動態(tài)參數(shù)
這三個參數(shù)目前值
sga_max_size big integer 272M
sga_target big integer 272M
db_cache_size big integer 0
因為sga_max_size和sga_target當前值相同
所以這里必須先修改sga_max_size并重啟數(shù)據(jù)庫后
才能繼續(xù)修改sga_target的值使其增加
在sga有足夠空間時才能增加db_cache_size的值
我的修改過程
在sga_target把值增加后就會立即自動把剩余的空間全部分配給db_cache_size
以為是因為db_cache_size使用默認值0,
但手工對db_cache_size分配值后效果仍然一樣。
在修改db_cache_size的值時
增加時是有限制的
sga要根據(jù)當前所有的狀態(tài)值分析有沒有足夠的空間滿足這個增大的值
減少時一般沒限制
因為這個值即使設(shè)置小了但sga仍使用自動分配空間分配給db_cache_size
一般真實值不會減少,仍保持在合理狀態(tài)
設(shè)置buffer cache的合理值:
SELECT size_for_estimate "Cache Size (MB)",size_factor,buffers_for_estimate "Buffers",
estd_physical_read_factor est_read_factor,
estd_physical_reads estd_phy_red,estd_physical_read_time est_phy_red_t
FROM v$db_cache_advice
WHERE NAME='DEFAULT' AND block_size=(SELECT VALUE FROM v$parameter WHERE NAME='db_block_size');
Cache Size (MB) SIZE_FACTOR Buffers EST_READ_FACTOR ESTD_PHY_RED EST_PHY_RED_T
--------------- ----------- ---------- --------------- ------------ -------------
1088 .1 128520 12.0303 5839773844 10813098
2176 .2 257040 4.7929 2326564251 3913685
3264 .3 385560 2.4136 1171610058 1645529
4352 .4 514080 1.5546 754629867 826643
5440 .5 642600 1.2682 615616449 553642
6528 .6 771120 1.1589 562544805 449417
7616 .7 899640 1.0981 533021196 391437
8704 .8 1028160 1.0541 511676762 349520
9792 .9 1156680 1.0238 496952824 320604
10880 1 1285200 1 485421183 297958
11968 1.1 1413720 .9812 476284469 280015
13056 1.2 1542240 .9644 468161067 264061
14144 1.3 1670760 .9495 460909360 249820
15232 1.4 1799280 .9358 454276548 236794
16320 1.5 1927800 .9253 449182455 226790
17408 1.6 2056320 .9128 443069856 214786
18496 1.7 2184840 .9015 437583045 204011
19584 1.8 2313360 .8913 432648923 194321
20672 1.9 2441880 .8659 420332933 170134
21760 2 2570400 .8412 408330158 146563
20 rows selected.
SQL> show parameter db_block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
一個塊大小是8192
1088MB除以8K就是第一行的buffers列的值128520
EST_READ_FACTOR 為預(yù)估的物理讀因子
ESTD_PHY_RED 預(yù)估的物理讀的次數(shù)
EST_PHY_RED_T 預(yù)估的物理讀時間
我們可以以物理讀時間作為標準
因為buffercache最最突出的作用是緩存block
目的是減少物理io
這樣就減少了物理io讀的時間
ESTD_PHY_RED和EST_PHY_RED_T基本上是同步的
次數(shù)多時間就長
在實際生產(chǎn)中我們就是找這個數(shù)值
它對應(yīng)的這行最后邊三列的值,在此行以后的行這三列的數(shù)值變化不大的時候
找此行Cache Size (MB)值設(shè)置就可以了
相關(guān)文章:
http://blog.csdn.net/xinzhan0/article/details/52663078
http://blog.itpub.net/12679300/viewspace-1185623/
名稱欄目:Oracle11gbuffercache的設(shè)置
文章URL:
http://weahome.cn/article/ipjojp.html