Oracle 数据库基础教程2007
第 8章 数据库实例与操作模式
Oracle 数据库基础教程2007
本章内容
Oracle实例
Oracle内存结构
Oracle后台进程
数据库操作模式
Oracle 数据库基础教程2007
本章要求
掌握 Oracle实例基本概念
掌握 Oracle实例的内存结构、功能及管理
了解 Oracle进程分类及其作用
掌握 Oracle后台进程、功能及管理
了解 Oracle数据库操作模式
Oracle 数据库基础教程2007
8.1实例概述
Oracle实例的概念是 Oracle数据库的软件结构,由一系列后台进程与内存结构组成
Oracle 数据库基础教程2007
处理数据的内存结构实 例后 台 进 程客户应用程序服务器进程数据库
Oracle 数据库基础教程2007
Oracle数据库服务器由数据库和实例组成
数据库与实例的关系
数据库是 Oracle用于保存数据的一系列物理结构和逻辑结构
用户直接与实例交互,由实例访问数据库。
每个数据库至少有一个与之对应的实例
启动数据库时先创建实例
Oracle 实例组成
Oracle 数据库基础教程2007
实例
SGA
日志缓存共享池数据字典缓冲区库缓冲区
DBWRSMONPMON CKPTLGWR Others
用户进程服务器进程
PGA
控制文件数据文 件 归档日志文件参数文件口令文件重做日志文件数据库数据库缓存
Oracle 数据库基础教程2007
8.2Oracle内存结构
系统全局区 SGA
SGA区是由 Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时连接同一个实例时,SGA区数据供多个用户共享,所以
SGA区又称为共享全局区。
程序全局区 PGA
PGA区是在用户进程连接数据库,创建一个会话时,
由 Oracle为用户分配的内存区域,保存当前用户私有的数据和控制信息。
Oracle 数据库基础教程2007
8.2.1系统全局区 SGA
SGA 包含的内存结构有:
数据高速缓冲区( Database Buffer Cache)
共享池( Shared Pool)
重做日志缓冲区( Redo Log Buffer)
其他结构 (例如锁管理、统计数据)
在 SGA,有两个可配置的可选内存结构,
大池( Large Pool)
Java池( Java Pool)
Oracle 数据库基础教程2007
数据高速缓冲区
功能
数据缓冲区存储的是从数据文件中检索出来的数据拷贝。应用程序要访问的数据必须从磁盘的数据文件读到数据缓冲区中处理。
在数据缓冲区中被修改后的数据由数据写入进程写到硬盘的数据文件中永久保存。
提高获取和更新数据的性能
S GA
用户进程服务器进程
D B W R 数据文件数据高速缓冲区脏缓存块 空闲缓存块 命中缓存块
Oracle 数据库基础教程2007
缓冲块的类型:
,脏,缓存块( Dirty Buffers)
保存的是已经被修改过的数据
空闲缓存块( Free Buffers)
不包含任何数据,它们等待后台进程或服务器进程向其中写入数据。
命中缓存块 (Pinned Buffers)
正被使用,或者被显式声明为保留的缓存块
Oracle 数据库基础教程2007
缓冲块的管理
该列表中包含那些已经被修改但还没有写入数据文件的脏缓存块。
LRU列表( Least Recently Used):该列表中包含所有的空闲缓存块、命中缓存块以及那些还没有来得及移入到脏缓存块列表的脏缓存块。在该列表中,
最近被访问的缓存块被移动到该列表的头部,而其他缓存块向列表尾部移动,最近最少被访问的缓存块最先被移出 LRU列表,从而保证最频繁使用的数据块始终保存在内存中
Oracle 数据库基础教程2007
数据高速缓冲区大小
DB_CACHE_SIZE
( DB_BLOCK_SIZE,DB_BLOCK_BUFFERS)
可以在参数文件中设置数据高速缓冲区的大小。数据高速缓冲区越大,用户需要的数据在内存中的可能性越大,即缓存命中率高,从而减少了 Oracle访问硬盘数据的次数,提高数据库系统执行的效率。
然而,数据高速缓冲区的值太大,Oracle不得不在内存中寻找更多的块来定位所需要数据,反而降低了系统性能。因此需要确定一个合理的数据高速缓冲区的大小。
Oracle 数据库基础教程2007
重做日志缓冲区
功能
用于缓存在用户对数据进行修改的操作过程中生成的重做记录。当重做日志缓冲区被添满时,由日志写入进程把重做日志缓冲区的内容写到磁盘的重做日志文件中做永久的保存。
S GA 区数据高速缓冲区 重做日志高速缓冲区
L GW R A R C H
归档文件 重做日志文件
Oracle 数据库基础教程2007
重做日志缓冲区的大小
LOG_BUFFER
在参数文件中设置,LOG_BUFFER的值越大,重做日志缓冲区就可以存放更多的事务提交的记录,减少了数据被频繁填充到重做日志文件中的次数。
Oracle 数据库基础教程2007
共享池
功能
用于缓存与 SQL或 PL/SQL语句、数据字典、资源锁以及其他控制结构相关的数据
组成
库缓存
库缓存用于缓存已经解释并执行过的 SQL语句和 PL/SQL程序代码,以提高 SQL或 PL/SQL程序的执行效率。
包括 SQL工作区和 PL/SQL工作区
数据字典缓存 区
数据字典缓存区保存最常用的数据字典信息
Oracle 数据库基础教程2007
共享池大小
SHARED_POOL_SIZE
合适的共享池大小,可使编译过的程序代码长驻内存,
大大降低重复执行相同的 SQL语句,PL/SQL程序的系统开销,从而提高数据库的性能。
Oracle 数据库基础教程2007
大型池
功能
大型池是一个可选的内存配置项,主要为 Oracle多线程服务器、服务器 I/O进程、数据库备份与恢复操作、
执行具有大量排序操作的 SQL语句、执行并行化的数据库操作等需要大量缓存的操作提供内存空间。如果没有在 SGA区中创建大型池,上述操作所需要的缓存空间将在共享池或 PGA中分配,因而影响共享池或
PGA的使用效率。
大型池大小
大型池的大小由参数 LARGE_POOL_SIZE参数指定,
在数据库运行期间,可以使用 ALTER SYSTEM语句修改大型池的大小,
Oracle 数据库基础教程2007
Java池
功能
Java提供对 Java程序设计的支持,用于存储 Java代码,Java语句的语法分析表,Java语句的执行方案和进行 Java程序开发。
Java池大小
Java池大小由参数 JAVA_POOL_SIZE指定,通常不小于 20M,以便安装 Java虚拟机
Oracle 数据库基础教程2007
影响 SGA大小的参数
DB_CACHE_SIZE
LOB_BUFFER
SHARED_POOL_SIZE
JAVA_POOL_SIZE
LARGE_POOL_SIZE
Oracle 数据库基础教程2007
8.2.3PGA区
功能
PGA 是为每一个与 Oracle数据库连接的用户保留的内存区,主要存储该连接使用的变量信息和与用户进程交换的信息。是非共享的,只有服务进程本身才能访问它自己的 PGA区
组成
由排序区、会话区、游标区以及堆栈区组成
排序区主要用于存放排序操作所产生的临时数据,其大小由初始化参数 SORT_AREA_SIZE定义;会话区用于保存用户会话所具有的权限、角色、性能统计信息;游标区用于存放执行游标操作时所产生的数据;堆栈区用于保存会话过程中的绑定变量、会话变量等信息。
Oracle 数据库基础教程2007
User
process
Stack
space
Session information
sort area,cursor information
SGA
Shared SQL areas
SGA
Session
information
PGA Dedicated server Shared server
Server
process
Shared SQL areas
Stack
space
sort area,cursor information
Oracle 数据库基础教程2007
8.2.4在 OEM中管理数据库实例的内存结构
Oracle 数据库基础教程2007
8.3Oracle后台进程
进程的概念
进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务。进程与程序的区别在于:
进程是动态的概念,即动态创建,完成任务后立即消亡;而程序是一个静态实体。
进程强调执行过程,而程序仅仅是指令的有序集合。
进程的类型
用户进程
服务器进程
后台进程
Oracle 数据库基础教程2007
用户进程
当用户连接数据库执行一个应用程序时,会创建一个用户进程,
来完成用户所指定的任务。
服务器进程
服务器进程由 Oracle自身创建,用于处理连接到数据库实例的用户进程所提出的请求。用户进程只有通过服务器进程才能实现对数据库的访问和操作。
服务器进程分为专用服务器进程和共享服务器进程两种。一个专用服务器进程只能为一个用户进程提供服务;一个共享服务器进程可以为多个用户进程提供服务。
服务器进程主要完成以下任务:
解析并执行用户提交的 SQL语句和 PL/SQL程序;
在 SGA的数据高速缓冲区中搜索用户进程所要访问的数据,如果数据不在缓冲区中,则需要从硬盘数据文件中读取所需的数据,再将它们复制到缓冲区中;
将查询或执行后的结果数据返回给用户进程。
Oracle 数据库基础教程2007
后台进程
后台进程作用
为了保证 Oracle数据库在任意一个时刻可以处理多用户的并发请求,进行复杂的数据操作,而且还要优化系统性能,
Oracle数据库起用了一些相互独立的附加进程,称为后台进程。服务器进程在执行用户进程请求时,调用后台进程来实现对数据库的操作。
后台进程主要完成以下任务:
在内存与磁盘之间进行 I/O操作;
监视各个服务器进程状态;
协调各个服务器进程的任务;
维护系统性能和可靠性等。
Oracle 数据库基础教程2007
Oracle 数据库基础教程2007
8.3.2Oracle后台进程
DBWR 数据库写入进程
LGWR 日志写入进程
CKPT 检查点进程
SMON 系统监控进程
PMON 进程监控进程
ARCH 归档进程
RECO 恢复进程
LCKn 封锁进程
Dnnn 调度进程
Snnn 共享服务器进程
Oracle 数据库基础教程2007
DBWR(数据库写入进程)
功能:
数据库写入进程负责把数据高速缓冲区中已经被修改过的数据(,脏,缓存块)成批写入数据文件中永久保存,同时使数据高速缓冲区有更多的空闲缓存块,保证服务器进程将所需要的数据从数据文件读取到数据高速缓冲区中,提高缓存命中率。
Instance
SGA
Database
Buffer
Cache
DBWn
Control filesData files Redo log files
Database
Oracle 数据库基础教程2007
启动 DBWR进程
执行 INSERT,UPDATE等操作时,没有足够的空闲块
当检查点发生时,将启动 DBWR进程
当数据缓存的 LRU列表的长度达到初始化
DB_BLOCK_WRITE_BATCH指定值的一半时
若发生超时(大约 3秒未被启动)
Oracle 数据库基础教程2007
LGWR(日志写入进程)
功能
日 志 写 入 进程 负 责 把重 做 日 志 缓冲 区 的 数据 写 入 重 做日 志 文 件中永久保存 。
数 据 写 入 进程 在 工 作之前,需 要了 解 日 志写 入 进 程 是否 已 经 把相 关 的 日 志缓 冲 区 中记 载 的 数 据写 入 硬 盘中,如 果 相关 的 日 志缓 冲 区 中 的记 录 还 没有被写入,DBWR会通知 LGWR完成 相应的工作,然后 DBWR
才开始写入 。
Instance
SGA
DBWn
Redo Log
Buffer
Control filesData files Redo log files
LGWR
Database
Oracle 数据库基础教程2007
启动 LGWR进程
用户通过 COMMIT语句提交当前事务
重做日志缓存被写满三分之一
DBWR进程开始将脏缓存块写入数据文件
每隔 3秒,即发生一次超时,将启动 LGWR
事务提交机制
快速提交
组提交
Oracle 数据库基础教程2007
CKPT(检查点进程)
检查点概念检查点是一个事件,
当该事件发生时(每隔一段时间发生),
DBWR进程把数据高速缓冲区中脏缓存块写入数据文件中,同时 Oracle将对数据库控制文件和数据文件的头部的同步序号进行更新,以记录下当前的数据库结构和状态,保证数据的同步。
Instance
SGA
DWW0
Redo Log
Buffer
LGWRB n CKPT
Control filesData files Redo log files
Oracle 数据库基础教程2007
CKPT进程的作用
更新控制文件与数据文件的头部,使其同步
触发 DBWR进程,将脏缓存块写入数据文件
检查点的级别
数据库检查点:每一次日志切换时,执行一个数据库检查点,
DBWR进程将数据高速缓冲区中的脏缓存块写入数据文件中;
表空间检查点:当一个表空间设置为脱机状态时,执行一个表空间检查点,DBWR进程把数据高速缓存中与该表空间相关的脏缓存块写入数据文件中。
时间检查点:可以设置以时间为基础的检查点,每隔一段时间执行一次检查点。需要为检查点设置一个合适的执行间隔,间隔太短,将会产生过多的硬盘 I/O操作;间隔太长,数据库的恢复将耗费太多时间。
Oracle 数据库基础教程2007
检查点事件的触发
每一个日志切换时
当实例以如下方式关闭时
NORMAL,TRANSACTION,IMMEDIATE
当使用 ALTER TABLESPACE [OFFLINE
NORMAL|READ ONLY|BEGIN BACKUP],作用于某个数据文件上的检查点发生时,
设置以时间为基础的检查点事件
当数据库管理员需要手工操作时
ALTER SYSTEM CHECKPOINT
Oracle 数据库基础教程2007
与检查点的相关初始化参数
LOG_CHECKPOINT_INTERVAL
用来指定重做日志文件每写多少操作系统块发生一次检查点事件
例如重做日志文件 1M,系统操作块为 1K:设置此参数为
500,则重做日志文件写入 500K时,检查点事件发生
LOG_CHECKPOINT_TIMEOUT
用来指定每隔多长时间发生一次检查点
如 1800,表示每隔 1800秒,如果为 0,表示此参数无效 E
LOG_CHECKPOINT_TO_ALERT
用于设置是否将检查点信息记录到警告日志中数
Oracle 数据库基础教程2007
SMON(系统监控进程)
功能
在实例启动时负责对数据库进行恢复;
回收不再使用的临时空间。
将各个表空间的空闲碎片合并(表空间的存储参数
PCTINCREASE不为 0时)。
Instance
SGA
SMON
Control filesData files Redo log files
Database
Oracle 数据库基础教程2007
PMON(进程监控进程)
功能
负责恢复失败的用户进程或服务器进程,并且释放进程所占用的资源;
清除非正常中断的用户进程留下的孤儿会话,回退未提交的事务,释放会话所占用的锁,SGA、
PGA等资源;
监控调度进程和服务器进程的状态,如果它们失败,
则尝试重新启动它们,并释放它们所占用的各种资源。
Instance
SGA
PMON
PGA area
Oracle 数据库基础教程2007
ARCH(归档进程)
功能
归档进程负责在日志切换后将已经写满的重做日志文件复制到归档目标中,防止写满的重做日志文件被覆盖
最多可启动 10个归档进程( ARC0 - ARC9)
Oracle 数据库基础教程2007
RECO(恢复进程)
功能
RECO进程负责在分布式数据库环境中自动解决分布式事务的故障。一个节点的 RECO自动解决所有的悬而未决的事务。当一个数据库服务器的 RECO后台进程试图建立同一远程服务器的通信,如果该远程服务器不可用或者网络连接不能建立时,RECO自动地在一个时间间隔之后再次连接。当且仅当数据库配置为分布式事务处理,且初始化参数
DISTRIBUTED_TRANSACTIONS的值大于 0时,
RECO进程才会自动启动。
Oracle 数据库基础教程2007
LCKn(锁进程)
功能
LCKn进程用于 Oracle并行服务器环境中。在数据库中最多可以启动 10个 LCKn进程,主要用于实例间的封锁。
Oracle 数据库基础教程2007
Dnnn(调度进程)
功能
Dnnn进程是多线程服务器( Multithreaded
Server,MTS)的组成部分,以后台进程的形式运行。调度进程接受用户进程请求,将它们放入请求队列中,然后为请求队列中的用户进程分配一个服务器进程。最后,从响应队列返回数据给用户进程
Oracle 数据库基础教程2007
SGA( System Global Area)
共享 SQL区共享池 数据库缓冲存储区 日志缓冲区数据字典
Server Process
User Process
DBWR PMON
CKPT
LGWR SMON
ARCH
Datafiles Control Files Redo Log Files
归档
Oracle 数据库基础教程2007
8.4数据库操作模式
专用服务器操作模式
共享服务器模式
Oracle 数据库基础教程2007
SGA
服务器进程
Oracle
Net
监听器进程
Listener.ora
监听器启动时读取
Oracle
Net
客户应用程序
tnsnames.ora
在连接时读取信息指定服务器进程连接请求
Oracle 数据库基础教程2007
8.4.1专用服务器模式
概念
所谓的专用服务器模式是指 Oracle为每个用户进程启动一个专门的服务器进程,该服务器进程仅为该用户进程提供服务,直到用户进程断开连接时,对应的服务器进程才终止。
服务器进程与客户进程是一对一的关系。
各个专用服务器进程之间是完全独立的,它们之间没有数据共享。
Oracle 数据库基础教程2007
专用服务器模式体系结构用户进程用户进程服务器进程服务器进程客户端 服务器端
S GA
区后台进程数据库实例
Oracle 数据库基础教程2007
专用服务器模式工作过程
用户进程向一个数据库实例发出连接请求。
位于数据库服务器中的 Oracle监听程序探测到用户进程请求后,
首先验证用户进程提供的用户名和口令,验证通过后建议一个专用的服务器进程为该用户进程提供服务。
用户提交一条 SQL语句。
专用服务器进程首先判断在共享 SQL工作区中是否存在类似的
SQL语句。如果不存在,将为这条 SQL语句分配新的共享 SQL工作区,然后解析该语句。在解析过程中,服务器进程将检查该语句的语法正确性。同时,该语句的私有数据和信息保存到服务器进程的 PGA中。
解析完成后,服务器进程开始在数据高速缓冲区中寻找 SQL语句所要求的数据。如果数据不在数据高速缓冲区中,还需要从数据文件中将所需要的数据读取到数据高速缓冲区中。
服务器进程执行 SQL语句。如果 SQL语句要对数据进行更改,仅在数据高速缓冲区中对缓存块进行更改,并将更改所生成的重做记录保存在重做日志缓存中。将来,由 LGWR进程将重做记录写入重做日志文件,由 DBWR进程将脏缓存块写入数据文件。
执行完毕后,服务器进程将结果返回给用户进程。
Oracle 数据库基础教程2007
8.4.2多线程服务器模式
概念
所谓多线程服务器模式是指在数据库中创建并启动一定数目的服务器进程,在调度进程的帮助下,这些服务器进程可以为任意数量的用户进程提供服务,即一个服务器进程可以被多个用户进程共享,所以多线程服务器模式又称为共享服务器模式
在创建数据库实例时,每个调度进程将自己的监听地址告诉
Oracle监听程序,监听程序根据监听地址把用户进程的请求传递给相应的调度进程。每个调度进程只能为使用特定网络协议连接实例的用户进程服务。当监听器监听到一个用户进程后,检查是否可以使用多线程服务器进程,如果可以,则将该用户进程传递给某个调度进程,然后用户进程直接与该调度进程通信。如果没有找到合适的调度程序,则将启用一个专用服务器进程为用户进程服务
Oracle 数据库基础教程2007
多线程服务器模式的体系结构
⑥
⑧
④
②
①
客户进程客户端监听程序服务器端调度程序后台进程
SG A
请求队列响应队列服务器进程数据库实例
③
⑤
⑦
Oracle 数据库基础教程2007
多线程服务器模式工作过程
在客户端创建一个用户进程,连接数据库。
位于服务器中的 Oracle监听程序探测到用户进程请求后,首先验证用户进程提供的用户名和口令,验证通过后将该用户进程分配给一个调度进程。用户进程直接与调度进程进行交互。
用户提交一条 SQL语句,调度进程对 SQL语句进行处理,然后将处理结果放入位于 SGA区中的一个,请求队列,中,同时将调度程序 ID也存入请求队列。
当某个共享服务器进程空闲时,从,请求队列,中取出一条处理后的 SQL语句,并对该语句进行解析和执行,得到它所请求的数据。
共享服务器进程将处理结果放入 SGA区中的一个,响应队列,中。
调度程序定期检查,响应队列,,如果发现有自己送出请求的处理结果,则将结果取出。调度程序根据处理结果中保存的调度程序 ID来标识该结果是否是自己的。
调度程序将处理结果返回给用户进程。
Oracle 数据库基础教程2007
小结
数据库实例的概念
实例内存区的组成与功能
实例后台进程的分类与功能
数据库服务器操作模式
第 8章 数据库实例与操作模式
Oracle 数据库基础教程2007
本章内容
Oracle实例
Oracle内存结构
Oracle后台进程
数据库操作模式
Oracle 数据库基础教程2007
本章要求
掌握 Oracle实例基本概念
掌握 Oracle实例的内存结构、功能及管理
了解 Oracle进程分类及其作用
掌握 Oracle后台进程、功能及管理
了解 Oracle数据库操作模式
Oracle 数据库基础教程2007
8.1实例概述
Oracle实例的概念是 Oracle数据库的软件结构,由一系列后台进程与内存结构组成
Oracle 数据库基础教程2007
处理数据的内存结构实 例后 台 进 程客户应用程序服务器进程数据库
Oracle 数据库基础教程2007
Oracle数据库服务器由数据库和实例组成
数据库与实例的关系
数据库是 Oracle用于保存数据的一系列物理结构和逻辑结构
用户直接与实例交互,由实例访问数据库。
每个数据库至少有一个与之对应的实例
启动数据库时先创建实例
Oracle 实例组成
Oracle 数据库基础教程2007
实例
SGA
日志缓存共享池数据字典缓冲区库缓冲区
DBWRSMONPMON CKPTLGWR Others
用户进程服务器进程
PGA
控制文件数据文 件 归档日志文件参数文件口令文件重做日志文件数据库数据库缓存
Oracle 数据库基础教程2007
8.2Oracle内存结构
系统全局区 SGA
SGA区是由 Oracle分配的共享内存结构,包含一个数据库实例共享的数据和控制信息。当多个用户同时连接同一个实例时,SGA区数据供多个用户共享,所以
SGA区又称为共享全局区。
程序全局区 PGA
PGA区是在用户进程连接数据库,创建一个会话时,
由 Oracle为用户分配的内存区域,保存当前用户私有的数据和控制信息。
Oracle 数据库基础教程2007
8.2.1系统全局区 SGA
SGA 包含的内存结构有:
数据高速缓冲区( Database Buffer Cache)
共享池( Shared Pool)
重做日志缓冲区( Redo Log Buffer)
其他结构 (例如锁管理、统计数据)
在 SGA,有两个可配置的可选内存结构,
大池( Large Pool)
Java池( Java Pool)
Oracle 数据库基础教程2007
数据高速缓冲区
功能
数据缓冲区存储的是从数据文件中检索出来的数据拷贝。应用程序要访问的数据必须从磁盘的数据文件读到数据缓冲区中处理。
在数据缓冲区中被修改后的数据由数据写入进程写到硬盘的数据文件中永久保存。
提高获取和更新数据的性能
S GA
用户进程服务器进程
D B W R 数据文件数据高速缓冲区脏缓存块 空闲缓存块 命中缓存块
Oracle 数据库基础教程2007
缓冲块的类型:
,脏,缓存块( Dirty Buffers)
保存的是已经被修改过的数据
空闲缓存块( Free Buffers)
不包含任何数据,它们等待后台进程或服务器进程向其中写入数据。
命中缓存块 (Pinned Buffers)
正被使用,或者被显式声明为保留的缓存块
Oracle 数据库基础教程2007
缓冲块的管理
该列表中包含那些已经被修改但还没有写入数据文件的脏缓存块。
LRU列表( Least Recently Used):该列表中包含所有的空闲缓存块、命中缓存块以及那些还没有来得及移入到脏缓存块列表的脏缓存块。在该列表中,
最近被访问的缓存块被移动到该列表的头部,而其他缓存块向列表尾部移动,最近最少被访问的缓存块最先被移出 LRU列表,从而保证最频繁使用的数据块始终保存在内存中
Oracle 数据库基础教程2007
数据高速缓冲区大小
DB_CACHE_SIZE
( DB_BLOCK_SIZE,DB_BLOCK_BUFFERS)
可以在参数文件中设置数据高速缓冲区的大小。数据高速缓冲区越大,用户需要的数据在内存中的可能性越大,即缓存命中率高,从而减少了 Oracle访问硬盘数据的次数,提高数据库系统执行的效率。
然而,数据高速缓冲区的值太大,Oracle不得不在内存中寻找更多的块来定位所需要数据,反而降低了系统性能。因此需要确定一个合理的数据高速缓冲区的大小。
Oracle 数据库基础教程2007
重做日志缓冲区
功能
用于缓存在用户对数据进行修改的操作过程中生成的重做记录。当重做日志缓冲区被添满时,由日志写入进程把重做日志缓冲区的内容写到磁盘的重做日志文件中做永久的保存。
S GA 区数据高速缓冲区 重做日志高速缓冲区
L GW R A R C H
归档文件 重做日志文件
Oracle 数据库基础教程2007
重做日志缓冲区的大小
LOG_BUFFER
在参数文件中设置,LOG_BUFFER的值越大,重做日志缓冲区就可以存放更多的事务提交的记录,减少了数据被频繁填充到重做日志文件中的次数。
Oracle 数据库基础教程2007
共享池
功能
用于缓存与 SQL或 PL/SQL语句、数据字典、资源锁以及其他控制结构相关的数据
组成
库缓存
库缓存用于缓存已经解释并执行过的 SQL语句和 PL/SQL程序代码,以提高 SQL或 PL/SQL程序的执行效率。
包括 SQL工作区和 PL/SQL工作区
数据字典缓存 区
数据字典缓存区保存最常用的数据字典信息
Oracle 数据库基础教程2007
共享池大小
SHARED_POOL_SIZE
合适的共享池大小,可使编译过的程序代码长驻内存,
大大降低重复执行相同的 SQL语句,PL/SQL程序的系统开销,从而提高数据库的性能。
Oracle 数据库基础教程2007
大型池
功能
大型池是一个可选的内存配置项,主要为 Oracle多线程服务器、服务器 I/O进程、数据库备份与恢复操作、
执行具有大量排序操作的 SQL语句、执行并行化的数据库操作等需要大量缓存的操作提供内存空间。如果没有在 SGA区中创建大型池,上述操作所需要的缓存空间将在共享池或 PGA中分配,因而影响共享池或
PGA的使用效率。
大型池大小
大型池的大小由参数 LARGE_POOL_SIZE参数指定,
在数据库运行期间,可以使用 ALTER SYSTEM语句修改大型池的大小,
Oracle 数据库基础教程2007
Java池
功能
Java提供对 Java程序设计的支持,用于存储 Java代码,Java语句的语法分析表,Java语句的执行方案和进行 Java程序开发。
Java池大小
Java池大小由参数 JAVA_POOL_SIZE指定,通常不小于 20M,以便安装 Java虚拟机
Oracle 数据库基础教程2007
影响 SGA大小的参数
DB_CACHE_SIZE
LOB_BUFFER
SHARED_POOL_SIZE
JAVA_POOL_SIZE
LARGE_POOL_SIZE
Oracle 数据库基础教程2007
8.2.3PGA区
功能
PGA 是为每一个与 Oracle数据库连接的用户保留的内存区,主要存储该连接使用的变量信息和与用户进程交换的信息。是非共享的,只有服务进程本身才能访问它自己的 PGA区
组成
由排序区、会话区、游标区以及堆栈区组成
排序区主要用于存放排序操作所产生的临时数据,其大小由初始化参数 SORT_AREA_SIZE定义;会话区用于保存用户会话所具有的权限、角色、性能统计信息;游标区用于存放执行游标操作时所产生的数据;堆栈区用于保存会话过程中的绑定变量、会话变量等信息。
Oracle 数据库基础教程2007
User
process
Stack
space
Session information
sort area,cursor information
SGA
Shared SQL areas
SGA
Session
information
PGA Dedicated server Shared server
Server
process
Shared SQL areas
Stack
space
sort area,cursor information
Oracle 数据库基础教程2007
8.2.4在 OEM中管理数据库实例的内存结构
Oracle 数据库基础教程2007
8.3Oracle后台进程
进程的概念
进程是操作系统中一个独立的可以调度的活动,用于完成指定的任务。进程与程序的区别在于:
进程是动态的概念,即动态创建,完成任务后立即消亡;而程序是一个静态实体。
进程强调执行过程,而程序仅仅是指令的有序集合。
进程的类型
用户进程
服务器进程
后台进程
Oracle 数据库基础教程2007
用户进程
当用户连接数据库执行一个应用程序时,会创建一个用户进程,
来完成用户所指定的任务。
服务器进程
服务器进程由 Oracle自身创建,用于处理连接到数据库实例的用户进程所提出的请求。用户进程只有通过服务器进程才能实现对数据库的访问和操作。
服务器进程分为专用服务器进程和共享服务器进程两种。一个专用服务器进程只能为一个用户进程提供服务;一个共享服务器进程可以为多个用户进程提供服务。
服务器进程主要完成以下任务:
解析并执行用户提交的 SQL语句和 PL/SQL程序;
在 SGA的数据高速缓冲区中搜索用户进程所要访问的数据,如果数据不在缓冲区中,则需要从硬盘数据文件中读取所需的数据,再将它们复制到缓冲区中;
将查询或执行后的结果数据返回给用户进程。
Oracle 数据库基础教程2007
后台进程
后台进程作用
为了保证 Oracle数据库在任意一个时刻可以处理多用户的并发请求,进行复杂的数据操作,而且还要优化系统性能,
Oracle数据库起用了一些相互独立的附加进程,称为后台进程。服务器进程在执行用户进程请求时,调用后台进程来实现对数据库的操作。
后台进程主要完成以下任务:
在内存与磁盘之间进行 I/O操作;
监视各个服务器进程状态;
协调各个服务器进程的任务;
维护系统性能和可靠性等。
Oracle 数据库基础教程2007
Oracle 数据库基础教程2007
8.3.2Oracle后台进程
DBWR 数据库写入进程
LGWR 日志写入进程
CKPT 检查点进程
SMON 系统监控进程
PMON 进程监控进程
ARCH 归档进程
RECO 恢复进程
LCKn 封锁进程
Dnnn 调度进程
Snnn 共享服务器进程
Oracle 数据库基础教程2007
DBWR(数据库写入进程)
功能:
数据库写入进程负责把数据高速缓冲区中已经被修改过的数据(,脏,缓存块)成批写入数据文件中永久保存,同时使数据高速缓冲区有更多的空闲缓存块,保证服务器进程将所需要的数据从数据文件读取到数据高速缓冲区中,提高缓存命中率。
Instance
SGA
Database
Buffer
Cache
DBWn
Control filesData files Redo log files
Database
Oracle 数据库基础教程2007
启动 DBWR进程
执行 INSERT,UPDATE等操作时,没有足够的空闲块
当检查点发生时,将启动 DBWR进程
当数据缓存的 LRU列表的长度达到初始化
DB_BLOCK_WRITE_BATCH指定值的一半时
若发生超时(大约 3秒未被启动)
Oracle 数据库基础教程2007
LGWR(日志写入进程)
功能
日 志 写 入 进程 负 责 把重 做 日 志 缓冲 区 的 数据 写 入 重 做日 志 文 件中永久保存 。
数 据 写 入 进程 在 工 作之前,需 要了 解 日 志写 入 进 程 是否 已 经 把相 关 的 日 志缓 冲 区 中记 载 的 数 据写 入 硬 盘中,如 果 相关 的 日 志缓 冲 区 中 的记 录 还 没有被写入,DBWR会通知 LGWR完成 相应的工作,然后 DBWR
才开始写入 。
Instance
SGA
DBWn
Redo Log
Buffer
Control filesData files Redo log files
LGWR
Database
Oracle 数据库基础教程2007
启动 LGWR进程
用户通过 COMMIT语句提交当前事务
重做日志缓存被写满三分之一
DBWR进程开始将脏缓存块写入数据文件
每隔 3秒,即发生一次超时,将启动 LGWR
事务提交机制
快速提交
组提交
Oracle 数据库基础教程2007
CKPT(检查点进程)
检查点概念检查点是一个事件,
当该事件发生时(每隔一段时间发生),
DBWR进程把数据高速缓冲区中脏缓存块写入数据文件中,同时 Oracle将对数据库控制文件和数据文件的头部的同步序号进行更新,以记录下当前的数据库结构和状态,保证数据的同步。
Instance
SGA
DWW0
Redo Log
Buffer
LGWRB n CKPT
Control filesData files Redo log files
Oracle 数据库基础教程2007
CKPT进程的作用
更新控制文件与数据文件的头部,使其同步
触发 DBWR进程,将脏缓存块写入数据文件
检查点的级别
数据库检查点:每一次日志切换时,执行一个数据库检查点,
DBWR进程将数据高速缓冲区中的脏缓存块写入数据文件中;
表空间检查点:当一个表空间设置为脱机状态时,执行一个表空间检查点,DBWR进程把数据高速缓存中与该表空间相关的脏缓存块写入数据文件中。
时间检查点:可以设置以时间为基础的检查点,每隔一段时间执行一次检查点。需要为检查点设置一个合适的执行间隔,间隔太短,将会产生过多的硬盘 I/O操作;间隔太长,数据库的恢复将耗费太多时间。
Oracle 数据库基础教程2007
检查点事件的触发
每一个日志切换时
当实例以如下方式关闭时
NORMAL,TRANSACTION,IMMEDIATE
当使用 ALTER TABLESPACE [OFFLINE
NORMAL|READ ONLY|BEGIN BACKUP],作用于某个数据文件上的检查点发生时,
设置以时间为基础的检查点事件
当数据库管理员需要手工操作时
ALTER SYSTEM CHECKPOINT
Oracle 数据库基础教程2007
与检查点的相关初始化参数
LOG_CHECKPOINT_INTERVAL
用来指定重做日志文件每写多少操作系统块发生一次检查点事件
例如重做日志文件 1M,系统操作块为 1K:设置此参数为
500,则重做日志文件写入 500K时,检查点事件发生
LOG_CHECKPOINT_TIMEOUT
用来指定每隔多长时间发生一次检查点
如 1800,表示每隔 1800秒,如果为 0,表示此参数无效 E
LOG_CHECKPOINT_TO_ALERT
用于设置是否将检查点信息记录到警告日志中数
Oracle 数据库基础教程2007
SMON(系统监控进程)
功能
在实例启动时负责对数据库进行恢复;
回收不再使用的临时空间。
将各个表空间的空闲碎片合并(表空间的存储参数
PCTINCREASE不为 0时)。
Instance
SGA
SMON
Control filesData files Redo log files
Database
Oracle 数据库基础教程2007
PMON(进程监控进程)
功能
负责恢复失败的用户进程或服务器进程,并且释放进程所占用的资源;
清除非正常中断的用户进程留下的孤儿会话,回退未提交的事务,释放会话所占用的锁,SGA、
PGA等资源;
监控调度进程和服务器进程的状态,如果它们失败,
则尝试重新启动它们,并释放它们所占用的各种资源。
Instance
SGA
PMON
PGA area
Oracle 数据库基础教程2007
ARCH(归档进程)
功能
归档进程负责在日志切换后将已经写满的重做日志文件复制到归档目标中,防止写满的重做日志文件被覆盖
最多可启动 10个归档进程( ARC0 - ARC9)
Oracle 数据库基础教程2007
RECO(恢复进程)
功能
RECO进程负责在分布式数据库环境中自动解决分布式事务的故障。一个节点的 RECO自动解决所有的悬而未决的事务。当一个数据库服务器的 RECO后台进程试图建立同一远程服务器的通信,如果该远程服务器不可用或者网络连接不能建立时,RECO自动地在一个时间间隔之后再次连接。当且仅当数据库配置为分布式事务处理,且初始化参数
DISTRIBUTED_TRANSACTIONS的值大于 0时,
RECO进程才会自动启动。
Oracle 数据库基础教程2007
LCKn(锁进程)
功能
LCKn进程用于 Oracle并行服务器环境中。在数据库中最多可以启动 10个 LCKn进程,主要用于实例间的封锁。
Oracle 数据库基础教程2007
Dnnn(调度进程)
功能
Dnnn进程是多线程服务器( Multithreaded
Server,MTS)的组成部分,以后台进程的形式运行。调度进程接受用户进程请求,将它们放入请求队列中,然后为请求队列中的用户进程分配一个服务器进程。最后,从响应队列返回数据给用户进程
Oracle 数据库基础教程2007
SGA( System Global Area)
共享 SQL区共享池 数据库缓冲存储区 日志缓冲区数据字典
Server Process
User Process
DBWR PMON
CKPT
LGWR SMON
ARCH
Datafiles Control Files Redo Log Files
归档
Oracle 数据库基础教程2007
8.4数据库操作模式
专用服务器操作模式
共享服务器模式
Oracle 数据库基础教程2007
SGA
服务器进程
Oracle
Net
监听器进程
Listener.ora
监听器启动时读取
Oracle
Net
客户应用程序
tnsnames.ora
在连接时读取信息指定服务器进程连接请求
Oracle 数据库基础教程2007
8.4.1专用服务器模式
概念
所谓的专用服务器模式是指 Oracle为每个用户进程启动一个专门的服务器进程,该服务器进程仅为该用户进程提供服务,直到用户进程断开连接时,对应的服务器进程才终止。
服务器进程与客户进程是一对一的关系。
各个专用服务器进程之间是完全独立的,它们之间没有数据共享。
Oracle 数据库基础教程2007
专用服务器模式体系结构用户进程用户进程服务器进程服务器进程客户端 服务器端
S GA
区后台进程数据库实例
Oracle 数据库基础教程2007
专用服务器模式工作过程
用户进程向一个数据库实例发出连接请求。
位于数据库服务器中的 Oracle监听程序探测到用户进程请求后,
首先验证用户进程提供的用户名和口令,验证通过后建议一个专用的服务器进程为该用户进程提供服务。
用户提交一条 SQL语句。
专用服务器进程首先判断在共享 SQL工作区中是否存在类似的
SQL语句。如果不存在,将为这条 SQL语句分配新的共享 SQL工作区,然后解析该语句。在解析过程中,服务器进程将检查该语句的语法正确性。同时,该语句的私有数据和信息保存到服务器进程的 PGA中。
解析完成后,服务器进程开始在数据高速缓冲区中寻找 SQL语句所要求的数据。如果数据不在数据高速缓冲区中,还需要从数据文件中将所需要的数据读取到数据高速缓冲区中。
服务器进程执行 SQL语句。如果 SQL语句要对数据进行更改,仅在数据高速缓冲区中对缓存块进行更改,并将更改所生成的重做记录保存在重做日志缓存中。将来,由 LGWR进程将重做记录写入重做日志文件,由 DBWR进程将脏缓存块写入数据文件。
执行完毕后,服务器进程将结果返回给用户进程。
Oracle 数据库基础教程2007
8.4.2多线程服务器模式
概念
所谓多线程服务器模式是指在数据库中创建并启动一定数目的服务器进程,在调度进程的帮助下,这些服务器进程可以为任意数量的用户进程提供服务,即一个服务器进程可以被多个用户进程共享,所以多线程服务器模式又称为共享服务器模式
在创建数据库实例时,每个调度进程将自己的监听地址告诉
Oracle监听程序,监听程序根据监听地址把用户进程的请求传递给相应的调度进程。每个调度进程只能为使用特定网络协议连接实例的用户进程服务。当监听器监听到一个用户进程后,检查是否可以使用多线程服务器进程,如果可以,则将该用户进程传递给某个调度进程,然后用户进程直接与该调度进程通信。如果没有找到合适的调度程序,则将启用一个专用服务器进程为用户进程服务
Oracle 数据库基础教程2007
多线程服务器模式的体系结构
⑥
⑧
④
②
①
客户进程客户端监听程序服务器端调度程序后台进程
SG A
请求队列响应队列服务器进程数据库实例
③
⑤
⑦
Oracle 数据库基础教程2007
多线程服务器模式工作过程
在客户端创建一个用户进程,连接数据库。
位于服务器中的 Oracle监听程序探测到用户进程请求后,首先验证用户进程提供的用户名和口令,验证通过后将该用户进程分配给一个调度进程。用户进程直接与调度进程进行交互。
用户提交一条 SQL语句,调度进程对 SQL语句进行处理,然后将处理结果放入位于 SGA区中的一个,请求队列,中,同时将调度程序 ID也存入请求队列。
当某个共享服务器进程空闲时,从,请求队列,中取出一条处理后的 SQL语句,并对该语句进行解析和执行,得到它所请求的数据。
共享服务器进程将处理结果放入 SGA区中的一个,响应队列,中。
调度程序定期检查,响应队列,,如果发现有自己送出请求的处理结果,则将结果取出。调度程序根据处理结果中保存的调度程序 ID来标识该结果是否是自己的。
调度程序将处理结果返回给用户进程。
Oracle 数据库基础教程2007
小结
数据库实例的概念
实例内存区的组成与功能
实例后台进程的分类与功能
数据库服务器操作模式