1 oracle 的基础架构及应用环境
oracle的基本组成结构
oracle server =由数据库+实例组成
database = 数据文件+控制文件+redo 日志组成
oralce 内存调度= SGA+PGA组成
oracle 实例= SGA +后台进程组成
系统全局SGA
1.在一个instance只有一个SGA ,一个系统可以有多个实例。故一个系统可以有不同的SGA
2.SGA 内存为所有oracle 客户端生成的session 共享,随着实例的启动而分配,实例关闭,SGA 内网将被释放
数据库
2 SGA的基本组件
shared pool (共享池)
共享池是对sql,pl/sql 程序进行语法分析,编译执行的内存区域。
共享池由库缓存(library cache)和数据字典缓存(data dictionary cache )以及结果缓存(result cache)组成
共享池的大小直接影响数据库的性能。
共享池中的几个概念
库缓存:库缓存是sql和plsql的解析场所,存放sql、plsql语句代码,以及他们的执行计划。以备其他用户共享
数据字典缓存。主要存放的是数据字典信息。以备其他用户使用
结果缓存:存放的是以前执行过的sql的结果集和PL/sql 函数返回值
user global area(UGA)
存放服务器端的sql结果集及pl/SQL 函数返回值
共享服务器连接模式下 如果没有配置large pool 则UGA 数据SGA的shared pool ,专用连接模式时UGA 属于PGA
2 database buffer cache
用户存储从磁盘数据文件中读入的数据,为所有用户共享。
服务器进程server process 负责将数据文件的数据,从磁盘读入到数据缓冲区,当后续的请求需要在这些数据时如果在内存中找
到,则不需要再从磁盘中读取。
数据缓冲区中被修改的数据库(脏块) 由后台进程DBWR 将其写入磁盘。
数据缓冲区的大小对数据库的读取速度有直接的影响。
database buffer cache中的几个cache概念
buffer pool = (default pool) + (nodefault pool)
其中:
default pool 是标准块存放的内存空间大小,SGA 自动管理时此参数不用设置,使用LRU 算法清理空间
nodefault pool 对应的参数有
DB_nk_cache_size 指定非标准块大小的内存空间,比如2k 4k 16k 32k
DB_keep_caceh_size 存放经常访问的小表或索引等。
DB_recycle_cace_size 与keep相反,存放偶尔做全表扫描的大表数据。
可以将固定某个表调入到 nodefault pool中
alter table scott.emp1 storage(buffer_pool keep)
可以使用命令进行查看
select segment_name,buffer_pool from dba_segments where segment_name='EMP1';
emp1 表保存了两份,一份是在存储上,一份是在内存里
default pool 对应的参数是DB_cache_size 与标准块default block 是配套的,如果default block是8k,DB_cache_size 这个参数将
代替db_8k_cache_size
如果要建立非标准块的表空间,先前要设定db buffer中的与之对应的db_nk_cache_size 参数
SQL> alter system set db_16k_cache_size=8m;
SQL> create tablespace tbs_16k datafile '/u01/oradata/prod/tbs16k01.dbf' size 10m blocksize 16k;
SQL> select TABLESPACE_NAME,block_size from dba_tablespaces;
3 redo log buffer
以日志条方式记录数据库的所有修改信息包括DML 和DDL ,目的是为了数据库恢复,日志条目首先产生于
日志缓冲区,日志缓冲区较小,一般缺省在3M-15M 之间,它是以自己为单位的
日志缓冲区的大小启动后是固定不变的,如果调整只能通过修改参数文件后重新启动生效,不能动态修改,
不能由SGA 自动管理
4 large pool (可选)
为了进行大的后台进程操作而分配的内存空间,主要用户共享服务器的session memroy rman 备份恢复以及并行查询等操作,有助于降低shared pool 碎片
5 java pool
为了java虚拟机及应用而分配的内存空间,包含所有session指定的java代码和数据
6.stream pool
为了stream process 而分配的 内存空间,stream技术是为了在不同数据库之间共享数据,因此它只对使用了stream 数据库特性的系统是重要的。
3 oracle 的进程
user process;
客户端的的进程,访问数据库分为三种形式,1.sql plus 2.应用程序 3 web方式(em)
server process
服务器器端的进程,user process 不能直接访问oracle,必须通过相应的server process 访问实例,进而访问数据库
linux 下命令 可以查看
ps -ef | grep LOCA
在linux可以看到的server process l(local=yes)是本地连接,(local=no) 是远程连接
可以在oracle 查看V$process 视图,它包含了当前所有的后台进程和服务器进程
select pid,program,background from v$process ;
background 字段为1是 background process 其他都是服务器进程
基本的后台进程有
smon:系统监控进程,当实列崩溃后,oracle会自动恢复实列,释放不再使用的临时短
pmon:进程监控,当用户进程失败时,清理出现故障的进程,释放所有当前被挂起的锁定,释放服务器使用的资源,监控空闲会话是否达到阈值,动态注册监听
dbwr :数据写入进程,将变更的数据缓冲区的脏buffer 写入数据文件中,释放数据缓冲区空间。可以有多个进程
在以下情况触发dbwn 写入数据文件1.检查点发生,2内存脏块达到阈值,3.db_buffer *空间不够时 4.表空脱机在线备份时
lgwr:写日志条目,将日志缓冲区中的日志条目写入日志文件中。lgwer 只有一个工作进程
在以下情况下会触发LGWR 进程.1,commit 2.logbuffer 三分之一满。3.检查点发生时,先于dbwr写入日志文件 4、时间到达3秒
ckpt:生成检查点,通知dbwr写入脏块 检查点有三种
完全检查点:保证数据库一致性
增量检查点:不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短实例恢复的时间。
局部检查点:特定的操作下针对某个空间
arcn 归档当前日志:归档模式下,把当前日志组的内容写入归档日志,作为历史日志提供数据库的recovery
4 PGA 的基本组件
program global area (程序全局区)的作用
缓存来自服务器进程和后台进程的数据和控制信息
提供排序,hash连接
pga在进程创建时被分配,进程终止时被释放,所有进程的pga之和构成了pga的大小 。
pga的结构
sql 工作区:有几个子区,1.sort area,2.harh area 3,bitmap merge area
作用排序操作,多表连接,位图连接,创建位图
会话空间 session memory
作用:存放logon信息等会话相关的控制信息
私有sql区域
作用:存储server process 执行sql所需要的私有数据和控制结构,如绑定变量,它包括固定区域和运行是区域
游标区域 plsql 游标使用就是这块区域
5 数据库的连接方式
专用连接模式(dedicated )
对于客户端的每个user process 服务器端都会出现一个server porcess ,会话与专用服务器之间存在一对一的映射。
专用连接的pga的古汉丽方式是私有的。oracle 缺省采用专用连接模式
共享连接池模式
多个user process 共享一个server process
共享服务器实际上是一种连接池机制,连接池可以重用已有的超时连接,服务器与其他活动火花,单容易产生锁等待,此种连接方式现在已经很少了
所有的调度进程共享一个公共的请求队列,但是每个进程都有自己的响应队列
在共享服务中会话的UGA 存储信息是在SGA 中,而不是想专用链接那个在pga中存储信息,这是的pga的存储结构为堆栈空间
驻留池模式
适用于必须维持数据库的永久链接,结合了专用服务器模式和共享服务器模式的特点,它使用链接代理,而不是专用服务器连接客户机到数据库,优点是可以用很少的内存
处理大量的并发连接,特别使用与apache 的php 应用环境