log_buffer的記憶體分配規律

BTxigua發表於2007-09-19
關於log_buffer的實驗

環境windows xp,Oracle9i Release 9.2.0.1.0 - Production
對於log_buffer的分配,在例項啟動以後,我們可以發現在v$parameter、v$sgastat、v$sga查詢的值是不一樣的。
select name, value/1024 from v$parameter where name='log_buffer';
select name, bytes/1024 from v$sgastat where name='log_buffer';
select name, value/1024 from v$sga where name='Redo Buffers';
v$parameter是我們可以自己設定的值,也可以設定為0,這時候,oracle降會以預設的最小值來設定v$sgastat的值,同時v$sga也是最小的值。下面的資料是在log_buffer引數值修改的過程中,其他兩個值對應變化的情況,從中也可以發現一些規律。
v$parameter v$sgastat v$sga
0 130 140
60k 130k 140k
78.5 144 152
80.5 146 156
87 152 160
89 154 164
90 155 164
91 156 164
92 157 168
101k 166k 176k
146.5k 276k 284k
176k 305k 316k

觀察上面的結果,我想我們可以這樣猜測:
v$sgastat的值是基於引數log_buffer的設定值,再根據一定的計算公式得到的。biti曾經說,v$sgastat是一組離散的組,如果是離散的值,那就應該是再某一個區間的log_buffer設定,對會對應同一個v$sgastat值,但事實上,我們看到log_buffer=87k-92k之間的變化可以看到,v$sgastat並不是一組離散的值。v$sgastat 再設定的時候會有最小值,在這個環境中,最小值為130k。
v$sga的值,則是根據v$sgastat的值,然後選擇再加上8k-11k的一個值,得到min(n*4k)的一個值。就是說得到的結果是4k的整數倍,也就是說v$sga是以4k的單位遞增的。

1、v$sgastat中log_buffer的值是連續的,不是離散的值。具體是根據引數log_buffer的設定來計算的。
2、v$sga的log bfuuer的值是一組以4k遞增的序列。具體的值是根據v$sgastat的值再加上8k到11k之間的一個值得到的。具體選擇8,9,10,11中的哪個,就是相加的結果被4整除為準。


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

相關文章