SGA: 所有用户都可以访问实例的共享内存区域。数据块、事物处理日志、数据字典信息都存储在SGA中。 PGA: 是一个非共享的内存,专用于特定的服务器进程,并且只能够由这个进程访问。 UGA: 为用户进程存储会话状态的内存区域。
UGA可以作为SGA或者PGA的一部分。具体位置取决于如何连接Oracle:
如果通过一个共享服务器连接,UGA包含在SAG中
如果通过一个专有服务器连接,UGA就包含在专有服务器的PGA中 1.3.1. Oracle内存结构—SGA
系统全局区(SGA)由一组内存结构组成,是所有用户进程共享的一块内存区域。其中可以包含一个数据库实例的数据或控制信息。在一个数据库实例中,可以有多个用户进程这些用户进程共享系统全局区中的数据,因此系统全局区也称之为共享全局区。
系统全局区(SGA)的总内存大小有参数sga_max_size决定。
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 1520M
sga_target big integer 0
SQL> show parameter sga_max_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 1520M
SQL>
SGA按其作用不同,可分为共享池、数据缓冲区、重做日志缓冲区、大池和java池等 共享池:
共享池是对SQL、PL/SQL程序进行语法分析,编译、执行时用到的内存区域,共享池由库缓存和数据字典缓存组成。
库缓存含有最近执行的SQL,PL/SQL语句的分析码和执行计划。
数据字典缓存含有从数据字典中得到的表、索引、列定义、权限信息和其他一些数据库对象的定义。如果oracle缓存了这些信息,无疑缩短了查询的响应时间。 Shared pool: 用于存储:
最近执行的sql语句;
最近使用的数据定义;
由两个与性能相关的部分组成
库缓存;
数据字典缓存;
由参数SHARED_POOL_SIZE决定大小
库缓存
存储最近使用的SQL和PL/SQL语句的信息
共享最常用的语句
包括两个部分:
共享SQL区域
共享PL/SQL区
大小由shared pool的大小决定
数据字典缓存
存储在数据库中最近使用的定义
包括数据文件、表、索引、列、用户、权限和其他的数据库对象
在分析阶段,服务器进程查找数据字典区验证对象的名字以及是否是合法访问
对于查询和DML语句,如果数据字典的信息在缓存中能够提高相应时间
大小由shared pool的大小决定
SQL> show parameter shared_pool_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 0
数据缓冲区:
数据缓冲区用于存储从磁盘数据文件中读入的数据,所有用户共享。数据被修改时,首先要从数据文件中取出,存储于数据缓冲中。修改的数据、插入的数据被存储于数据缓冲区,修改完成和其他条件满足时,数据被写入数据文件。
Oracle服务器进程在处理一个查询时,首先查找内存中是否存在所需的数据块。如果在数据缓冲区中没有找到需要的数据块,服务器进程则从数据文件中读取此数据块,并保存在缓冲区中。当后续的请求需要读取这些块时,可以在内存中找到,因此这些请求不需要从磁盘读取,提高了读取速度。数据缓冲区的大小对数据库的读取速度有直接的影响。
初始化参数DB_BLOCK_SIZE决定了数据块的大小,这也是数据库I/O的最小单位
数据缓存区由多个独立的子缓存池构成,可以独立的设置大小:
---default 池 DB_CACHE_SIZE
---keep 池 DB_KEEP_CACHE_SIZE
---recycle 池 DB_RECYCLE_CACHE_SIZE
SQL> show parameter db_block_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192 重做日志缓冲区:
当用户执行了如INSERT、UPDATE、DELETE、CREATE、ALTER或DROP等操作后,数据发生了变化,这些变化了的数据在写入数据缓存之前先写入重做日志缓冲区,同时变化之前数据也放入重做日志缓存,这样在数据恢复时oracle就知道哪些资源需要提交,哪些资源需要撤回。相对于数据缓冲区,日志缓冲区对数据库的性能影响较少。
重做日志缓冲区的大小由参数LOG_BUFFER决定,这个内存区不能动态调整大小
SQL> show parameter log_buf
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_buffer integer 7106560 大池:
在SGA中,大池是一个可选的缓冲区,管理员可以根据需要对其进行配置。在大规模输入输出及备份过程中也需要大池作为缓存空间。例如,大数据操作,数据库备份与恢复之类操作。 大池主要在下面几种情况下使用:
共享服务器的用户全局区(UGA)
并行进程
使用RMAN做备份恢复
大小参数由LARGE_POOL_SIZE决定,也可以动态改变大小。
SQL> show parameter large_pool_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
large_pool_size big integer 0
修改大池的大小
SQL>>
System> 查看修改后的大池的大小
SQL> show parameter large_pool_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
large_pool_size big integer 16M Java池:
在SGA中,java池也是一个可选的缓冲区,但是在安装JAVA或者使用JAVA程序时则必须设置JAVA池,用于编译JAVA语言编写的指令。 JAVA池主要用于:
用于java程序的解析和执行
大小由参数JAVA_POOL_SIZE决定,也可以动态调整
SQL> show parameter java_pool_size;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_pool_size big integer 0 1.3.2. Oracle内存结构—PGA
PGA是oracle用户进程使用的一个内存区域
一个用户进程对应一个PGA,与SGA不同的是PGA是非共享的。
主要用于用户在运行程序时的使用的变量空间。
如果使用共享服务器设置,那么PGA的会话信息可能被存在SGA中。
共享服务器结构允许用户进程使用同一个服务器进程,提高内存利用率。
PGA是用户进程连接到oracle数据库并创建一个会话时,有oracle自动分配,当一个用户会话结束后,PGA释放。
SGA存放了SQL,PL/SQL的分析信息,当用户要依据执行select、update语句的值不能被共享,这些不能共享的就在PGA中。
程序全局区的大小由pga_aggregate_target决定,通过show parameter pga_aggregate_target
SQL> show parameter pga_aggregate_target;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0 1.4. Oracle的进程结构
进程用于执行特定的任务,不同的进程完成的任务不同。
Oracle的进程分为三大类:
--用户进程:客户端用于连接数据库的程序
--服务进程:服务器端响应用户操作请求的程序
--后台进程:维护数据库服务器正常运行以及一些特定功能所需要的进程,随着实例启动而启动。
Oracle的用户进程就是客户端连接数据库的程序
当客户端程序发出连接请求,用户进程启动。当断开连接,用户进程释放。
服务器进程就是服务器端响应用户操作请求的程序(进程),同用户进程一样,连接开始,服务进程分配,连接断开,服务进程释放。
后台进程用于执行数据库服务器中特定的任务,根据进程的功能,后台进程被分为必要的和可选的两种。
必要的后台进程是系统运行必须的,主要由下面5种:
DBWN、PMON、CKPT、LGWR、SMON
可选的后台进程更多一些,主要被用于实现或者增强某方面的特殊功能。 PMON进程
PMON进程在用户连接意外中断后执行资源清理工作包括下列任务: