1 oracle 的基础架构及应用环境
php
oracle的基本组成结构java
oracle server =由数据库+实例组成
node
database = 数据文件+控制文件+redo 日志组成linux
oralce 内存调度= SGA+PGA组成web
oracle 实例= SGA +后台进程组成算法
系统全局SGA
sql
1.在一个instance只有一个SGA ,一个系统能够有多个实例。故一个系统能够有不一样的SGA
数据库
2.SGA 内存为全部oracle 客户端生成的session 共享,随着实例的启动而分配,实例关闭,SGA 内网将被释放apache
数据库
缓存
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写入日志文件 四、时间到达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 应用环境