在Oracle 10g引入了自动的SGA调整之后,Oracle的内存管理变得简单了,但是很多Buffer的技术实现、管理等都发生了重大变化,这也包括LOG_BUFFER。
在Oracle 10g之前,该参数的默认设置为Max(512 KB,128 KB * CPU_COUNT),按照默认设置,LOG_BUFFER消耗的内存都不会太高,而由于LGWR对Log Buffer内容的写出非常频繁,所以很小的Log Buffer也可以工作得很好,根据经验,有很多对Log Buffer的指导性设置,比如经常提到的3MB大小,但是在Oracle10g中,Redo Log Buffer默认的已经大大超过了原来的想象。
这和Oracle 9i引入了Granule的概念有关,在动态SGA管理中,Granule是最小的内存分配单元,其大小与SGA及操作系统平台有关。在Oracle 10g中,Oracle的内存分配会为'Fixed SGA Size'和'Redo Buffers'共享整数倍个Granule。看看不同SGA设置下的内存分配情况:
SQL> select * from v$version where rownum <2;
BANNER
------------------------------------------------------------
----
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 -
Prod
SQL> select * from v$sgainfo where name in ('Fixed SGA
Size','Redo Buffers','Granule Size');
NAME BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size 1267212 No
Redo Buffers 15507456 No
Granule Size 16777216 No
SQL> select sum(bytes)/1024/1024 from v$sgainfo where name
in ('Fixed SGA Size','Redo Buffers');
SUM(BYTES)/1024/1024
--------------------
15.99757
而在另外一个生产系统中,共分配了2个Granule,每个4MB。
SQL> select * from v$sgainfo where name in
('Fixed SGA Size','Redo Buffers','Granule Size');
NAME BYTES RES
-------------------------------- ---------- ---
Fixed SGA Size 1263320 No
Redo Buffers 7122944 No
Granule Size 4194304 No
SQL> select sum(bytes)/1024/1024 from v$sgainfo
where name in ('Fixed SGA Size','Redo Buffers');
SUM(BYTES)/1024/1024
--------------------
7.99776459
甲骨文(Oracle)重庆江北WDP中心,您身边的Oracle数据库认证专家!
|
|