概述oracle的内存结构

PGA和UGA(user global area and program or process global area)
PGA是进程专用的内存区


对于每天在数据库上运行的应用,推荐使用自动的PGA内存管理;手动内存管理则适用于大型批处理作业,它们在特殊的时段运行,并且在这个时候它们是数据库中唯一的活动。


如果使用dedicated server模式连接数据库,UGA会从PGA分配
如果使用shared server模式连接数据库,UGA会从SGA分配


在使用shared server的时候,必须适当的设置SGA中large pool的大小,以便有足够的空间来适应可能并发的连接数据库的每一个用户,所以,shared server的SGA总是比dedicated server的SGA要大很多。


SGA包括以下部分:
java pool:用来运行数据库中的JVM的内存——JAVA_POOL_SIZE
large pool:在用shared server连接方式的时候存储session信息,并行执行消息缓冲区功能,RMAN备份的时候磁盘I/O缓存


——LARGE_POOL_SIZE
shared pool:包括共享的游标,存储过程,状态对象,数据字典缓存等——SHARED_POO_SIZE
streams pool:
the null pool:包括database buffer cache,redo log buffer,fixed SGA area


SGA的各个组件释放或者是分配都是以granules为单位进行非配,除了redo log buffer以外,granule的大小依赖于每个平台,大小由SGA的大小决定
内存分配的最小单位为granule,granule的大小分别为4MB,8MB,16MB
在SGA大小为1GB以下的时候,granule大小为4MB
当SGA大小为1GB以上的时候,granule大小为16MB,但是这个值是依赖数据库版本和操作系统
LOG_BUFFER:redo log buffer的大小
SGA_TARGET:SGA内存自动管理
SGA_MAX_SIZE:SGA使用的最大内存




Fixed SGA:相当于数据库的启动区,在数据库安装的时候大小就是确定的

Redo Buffer:log_buffer的参数最小值依赖于操作系统,很少的系统能从很大的redo log buffer中受益,因为LGWR写入很快


Database buffer cache:具有三种状态:Unused,Clean,Dirty
least recently used (LRU)
Buffer Pools包括三个,具体为Default pool、Keep pool、Recycle pool
The default block size is 8 KB. The cache contains separate pools for tablespaces that use the nonstandard 


block sizes of 2 KB, 4 KB, and 16 KB.
同样是写入磁盘,为什么LGWR的写入磁盘速度远超于DBWn?
LGWR writes redo sequentially to disk while DBWn performs scattered writes of data 
blocks to disk. Scattered writes tend to be much slower than sequential writes. Because 
LGWR enable users to avoid waiting for DBWn to complete its slow writes, the 
database delivers better performance.

因为一个是顺序的写入,另外一个写入是零散的写入到磁盘中





for linux and python
原文地址:https://www.cnblogs.com/kellyseeme/p/5525193.html