LOG_BUFFER设置与变迁

在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*fromv$versionwhererownum <2;

BANNER

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

----

OracleDatabase10g Enterprise Edition Release 10.2.0.4.0 -

Prod

SQL>select*fromv$sgainfowherenamein('Fixed SGA

Size','Redo Buffers','GranuleSize');

NAMEBYTES RES

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

Fixed SGASize1267212No

Redo Buffers                       15507456No

GranuleSize16777216No

SQL>selectsum(bytes)/1024/1024fromv$sgainfowherename

in('Fixed SGA Size','Redo Buffers');

SUM(BYTES)/1024/1024

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

15.99757

而在另外一个生产系统中,共分配了2个Granule,每个4MB。SQL>select*fromv$sgainfowherenamein

('Fixed SGA Size','Redo Buffers','Granule Size');

NAMEBYTES RES

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

Fixed SGASize1263320No

Redo Buffers                        7122944No

GranuleSize4194304No

SQL>selectsum(bytes)/1024/1024fromv$sgainfo

wherenamein('Fixed SGA Size','Redo Buffers');

SUM(BYTES)/1024/1024

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

7.99776459

【责任编辑:董书 TEL:(010)68476606】

点赞 0

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐