Oracle内存结构
Oracle数据库=instance(实例) + database files (数据文件)
Oracle实例= 内存 + 后台进程
作用:
内存 -- 数据查询的速度
-- 更好的提升数据处理的速度
后台进程 -- 为了完成特定的任务的服务进程
数据文件 -- 数据的永久保存
具体简述:
内存:
-
System global area (SGA) --SGA区包括Oracle实例需要的一系列内存组件,用于存放数据信息和数据控制信息。内存属于共享性。
-
Program global area (PGA) -- PGA区属于非共享性存储,它的数据和控制信息为某个会话独有,当一个会话产生时,Oracle会为这个会话分配一个PGA内存区域,所以属于单个的服务端进程或者后台进程。就实例配置而言,pag_aggregate_target设定的值指这些会话占用的PGA的总和。
-
User Global Area (UGA) -- UGA区保存和当前会话相关的信息,比如PL/sql的变量,绑定变量的值或者当前会话的相关信息。
-
Software code ares -- 这是Oracle存放自身软件代码的一部分内存区,不允许其他会话访问。
System global area (SGA)
1 . Database Buffer Cache
-
存放从磁盘中读到内存中的数据块,这些数据块可以被所有的会话访问,是全局共享的,一个buffer指的是用来从磁盘中读入的数据库的在内存中的存放位置,SGA中细分为Default pool、Keep pool、Recycle pool
-
Default pool --存放正常的内存区域
-
Keep pool --这个区域用于将一些数据始终固定在内存中,Default pool会根据一个LRU过期算法将过期的脏数据写到磁盘上,如果有一些业务数据规定始终要存放在内存中,防止再次从磁盘读取,可以将该数据块存放在keep pool区域内。
-
Recycle pool --存放一些不经常使用的数据块,避免这些数据块在Default pool池中占据空间。
-
2k\4k\18k --设定非标准大小(8K)表空间数据块信息 (show parameter k_cache_size , alter system set db_16k_cache_size=10M, create tabespace ts_16k blocksize 16k)
-
3种状态 -- unused clean dirty
-
2种模式 -- current mode(当前模式) consistent mode(一致性模式)
2 . Redo Log Buffer
- 存放数据库产生的redo数据,通过LGWR进程以循环的方式将redolog buffer写入磁盘,当redolog已经被写入磁盘后,就可以被后续的日志数据覆盖。
3 . Shared Pool
-
用来存放SQL的内存区,包括 Library Cache \ Data Dictionary Cache \ Server Result Cache \ Reserved Pool
-
Library Cache -- 保存着可以执行的SQL及PL/sql包,比如SQL语句的执行计划和一些控制结构
-- 当一条SQL语句被执行时,Oracle尝试到Library Cache中查找是否有相同的SQL(通过hash_value),如果有,将直接重用存在的SQL的信息(执行计划),这个称作软解析(soft pase)或者叫做 Library cache hit,反之,SQL将被重新解析,这个过程称为hard parse或者library cache miss(该操作消耗CPU)。
-
Data Dictionary Cache -- 存放Oracle的数据字典信息,这些信息包含数据库中对象的数据信息,结构信息等,这些信息在SQL解析过程中需要频繁的被访问到。基本属于静态信息,比如 视图 dba(all,user) tables ... 基表 user$,table$..... 固话表 x$.... x$bh等。
-
Server Result Cache -- 保留了SQL查询的结果集,对于后续的相关查询,Oracle无需重新加载数据块进行计算,直接使用现有的数据集,由参数 result_cache_mode设置,默认值 manual,通过HINT中result_cache时开启保留模式,设置为force时会严重的消耗shared_pool空间。同时该区域也保留 PL/SQL的函数结果。
-
Reserved Pool --预留空间,Ora-4031报错一般与该区域设置大小有关,可以通过_shared_pool_reserved_pct和shared_pool_reserved_size设置大小。
4 . Large Pool
-
对数据的处理不适用LRU算法,一般在MTS模式下UGA会放在large pool,并行执行时会使用Large pool,RMAN备份时启动并行备份时,使用large pool。
5 . Java Pool
-
用于保存会话运行的Java代码和信息
-
存放着流相关信息,比如流队列信息,该内存池只为流复制提供内存空间。
6 . Fixed SGA
-
固话SGA保存通用的数据库和实例状态信息。无法手工改变。
Program global area (PGA)
SQL Work Areas:
-
Sort Area --保存数据排序的区域
-
Hash Area --保存数据hash区域
-
Bitmap Merge Area -- bitmap操作索引区
Private SQl Area(UGA)
-
Session Memory --会话信息区域
-
Persistent Area -- 同上
-
Runtime Area -- 同上
User Global Area (UGA)
-
session Variables -- 登录信息、变量值、Pl/sql参数
-
OLAP Poll -- olap维度对象,比如cube
-
Dedicated server(专有连接服务),UGA保存在PGA中。
-
Shared Server (MTS,共享连接服务),UGA保存在SGA中large_pool中。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31438017/viewspace-2139858/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31438017/viewspace-2139858/