oracle数据库:内存结构_笔记8
4.2.1固定SGA
固定SGA(fixed SGA)是SGA的一个组件,其大小因平台和版本而异。安装时,固定SGA会“编译到”Oracle二进制可执行文件本身当中。在固定SGA中,有一组指向SGA中其他组件的变量,还有一些变量中包含了各个参数的值。我们无法控制固定SGA的大小,不过固定SGA通常都很小。可以把这个区想成是SGA中的“自启”区,Oracle在内部要使用这个区来找到SGA的其他区。
4.2.2重做缓冲区
如果数据需要写到在线重做日志中,则在写至磁盘之前要在重做缓冲区(redo buffer)中临时缓存这些数据。由于内存到内存的传输比内存到磁盘的传输快得多,因此使用重做日志缓冲区可以加快数据库的操作。数据在重做缓冲区里停留的时间不会太长。实际上,LGWR会在以下某个情况发生时启动对这个区的刷新输出(flush):
.每3秒一次
.无论何时有人提交请求
.要求LGWR切换日志文件
.重做缓冲区1/3满,或者包含了1MB的缓存重做日志数据
由于这些原因,如果重做缓冲区的大小超过几MB,通常对系统就没有什么意义了,实际上,能从这么大的重做缓冲区得到好处的系统极为少见。如果是一个有大量并发事务的大型系统,也许大的重做日志缓冲区会对它有利,因为LGWR(这个进程负责将重做日志缓冲区刷新输出到磁盘)写日志缓冲区的一部分时,其他会话可能会在缓冲区中填入新的数据。一般而言,如果一个事务长时间运行,就会生成大量重做日志,倘若采用更大的日志缓冲区而不是正常的日志缓冲区,对这种事务最有好处,因为在LGWR忙于将部分重做日志写出到磁盘时,重做日志缓冲区还会继续填入日志。事务越大、越长,大日志缓冲区的好处就越显著。
redo的缓冲区的默认大小(受LOG_BUFFER参数控制)随不同操作系统、数据库版本和其他参数设置会有很大变化。
以下查询显示了默认LOG_BUFFER
idle>select value,isdefault from v$parameter where name='log_buffer';
VALUE
----------------------------------------------------------------------------------------------------
ISDEFAULT
---------------------------
6193152
TRUE
大小约为6MB。默认日志缓冲区的最小大小取决于具体的操作系统。如果想知道 到底是多少,只需将LOG_BUFFER设置为1字节,再重启数据库。
idle>alter system set log_buffer=1 scope=spfile;
System altered.
idle>connect / as sysdba;
Connected.
sys@ORCL>startup force;
ORACLE instance started.
Total System Global Area 855982080 bytes
Fixed Size 2233160 bytes
Variable Size 641731768 bytes
Database Buffers 209715200 bytes
Redo Buffers 2301952 bytes
Database mounted.
Database opened.
sys@ORCL>show parameter log_buffer
NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
log_buffer integer
1703936
sys@ORCL>
sys@ORCL>select 1703936/1024/1024 from dual;
1703936/1024/1024
-----------------
1.625
http://www.52ij.com/jishu/5168.htmloracle数据库:内存结构_笔记7
本文来源 我爱IT技术网 http://www.52ij.com/jishu/5169.html 转载请保留链接。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
