Oracle11g六个重要进程

Oracle实例的进程结构

这里所讲的里程是指Unix系统中的进程,在Windows中,Oracle是一个操作系统服务。
  Oracle实例由内存区域和后台进程组成。
  Oracle实例分为单进程实例(一个进程执行全部的Oracle代码,只允许单个用户存取)和多进程实例(由多个进程执行Oracle代码的不同部分,对于每一个连接的用户都有一个进程,允许多个用户同时使用)。


  在多进程结构中,除服务器进程(请注意,此“服务器进程”不是指所有的实例中的进程,见下面的说明)外,还有其他后台进程,包括:Dnnn,DBWR,LGWR,ARCH,PMON,SMON,CKPT,RECO等。在数据库启动后,这些进程常驻操作系统。Oracle中所有进程的数量之和不能超过参数PROCESS设定的值:
  sql>show parameter process
  当Oracle客户端应用程序与Oracle实例连接的时候,Oracle会产生一个服务器进程来为这些客户服务,此进程在widnows下表现为线程。此进程的主要作用有:对于用户发出的SQL语句进行语法分析,编译,执行用户的SQL语句,如是数据块不在数据缓冲区时,则从磁盘数据文件将数据读入到SGA的共享数据缓冲区中,将SQL语句的执行结果返回组应用程序。下面的语句用来查询数据库中的用户会话信息。


sql>select substr(s.sid,1,3) sid,substr(s.serial#,1,5) ser,spid,substr(schemaname,1,10) schema,substr(type,1,3) typ,substr(decode((consistent_gets+block_gets),0,'None',(100*(consistent_gets+block_gets-physical_reads)/consistent_gets+block_gets))),1,4) "%hit",value cpu,substr(block_changes,1,5) bchng from v$process p,v$sesstat t,v$sess_io i,v$session s where i.sid=s.sid and p.addr=paddr(+) and s.sid=t.sid and t.statistic#=12;


结果中:
sid 表示会话ID号,
ser 表示会话serial#号,serial#与sid组合以唯一表示一个会话,
spid 表示操作系统进程号,
schema 表示数据库用户名,
typ 表示进程类型,use为用户进程,bac为后台进程
%hit 表示数据缓冲区命中率,
cpu 表示使用cpu的时间,
bchng 表示修改了的数据块的个数。

下面介绍各个后

Oracle实例的进程结构

这里所讲的里程是指Unix系统中的进程,在Windows中,Oracle是一个操作系统服务。
  Oracle实例由内存区域和后台进程组成。
  Oracle实例分为单进程实例(一个进程执行全部的Oracle代码,只允许单个用户存取)和多进程实例(由多个进程执行Oracle代码的不同部分,对于每一个连接的用户都有一个进程,允许多个用户同时使用)。


  在多进程结构中,除服务器进程(请注意,此“服务器进程”不是指所有的实例中的进程,见下面的说明)外,还有其他后台进程,包括:Dnnn,DBWR,LGWR,ARCH,PMON,SMON,CKPT,RECO等。在数据库启动后,这些进程常驻操作系统。Oracle中所有进程的数量之和不能超过参数PROCESS设定的值:
  sql>show parameter process
  当Oracle客户端应用程序与Oracle实例连接的时候,Oracle会产生一个服务器进程来为这些客户服务,此进程在widnows下表现为线程。此进程的主要作用有:对于用户发出的SQL语句进行语法分析,编译,执行用户的SQL语句,如是数据块不在数据缓冲区时,则从磁盘数据文件将数据读入到SGA的共享数据缓冲区中,将SQL语句的执行结果返回组应用程序。下面的语句用来查询数据库中的用户会话信息。


sql>select substr(s.sid,1,3) sid,substr(s.serial#,1,5) ser,spid,substr(schemaname,1,10) schema,substr(type,1,3) typ,substr(decode((consistent_gets+block_gets),0,'None',(100*(consistent_gets+block_gets-physical_reads)/consistent_gets+block_gets))),1,4) "%hit",value cpu,substr(block_changes,1,5) bchng from v$process p,v$sesstat t,v$sess_io i,v$session s where i.sid=s.sid and p.addr=paddr(+) and s.sid=t.sid and t.statistic#=12;


结果中:
sid 表示会话ID号,
ser 表示会话serial#号,serial#与sid组合以唯一表示一个会话,
spid 表示操作系统进程号,
schema 表示数据库用户名,
typ 表示进程类型,use为用户进程,bac为后台进程
%hit 表示数据缓冲区命中率,
cpu 表示使用cpu的时间,
bchng 表示修改了的数据块的个数。

下面介绍各个后台进程。

1. DBWR进程
DBWR(Database Writer)进程将缓冲区中的数据写入数据文件,负责数据缓冲区的管理。
当数据缓冲区中的一个数据被修改后,被标记为“脏”,DBWR进程负责将“脏”数据写入磁盘。
DBWR采用LRU算法来替换数据缓冲区中的数据。
DBWR的作用包括:
1) 管理数据缓冲区,以便服务器进程总能找到空闲缓冲区
2) 将所有修改后的缓冲区中的数据写入数据库文件
3) 使用LRU算法将最近使用过的块保留在内存中
4) 通过延迟写来优化磁盘i/o.

在下列情况下DBWR要将脏数据写入磁盘数据文件:

1)生产checkpoint的时候,这个检查点将作为数据恢复的起点,该检查点之前的数据写入datafiles。

2)当一个服务器进程将缓冲数据块移“脏表”,面该脏表达到一定程度进。(该临界长度由参数DB_BLOCK_WRITE_BATCH决定)

3)当一个服务器进程在LRU表中查找DB_BLOCK_MAX_SCAN_CNT缓冲区时,没有查到空闲的缓冲区

4)表空间设置为只读的时候

5)表空间设置为脱机状态

6)删除表或者截断表的时候

7)出现超时

8)表空间开始备份

在一个Oracle实例中,允许启动多个DBWR进程,DBWR进程个数由参数DB_WRITE_PROCESSES指定,上限为20,进程名依次自动命名为:DBW0,DBW1,DBW2...DBW19。
sql>show parameter processes

2. LGWR进程

 LGWR(Log Writer)进程将日志数据从日志缓冲区中写入磁盘日志文件中。

LGWR的写盘条件是:
1) 发生提交,即commit;
2) 日志缓冲区达到总数的1/3时;

3)每3s进行一次写入

4)有1M的缓冲日志

5)写脏块之前进行

3. SMON进程

SMON(System Monitor),系统监控进程,监控实例的开始和关闭,并负责清理不再使用的临时段。

1)、在实例失败之后,重新打开数据库时自动恢复实例。 
2)、整理数据文件的自由空间,将相邻区域结合起来。
3)、释放不再使用的临时段。

4. PMON进程

PMON(Process Monitor),进程监控里程,在服务器进程出现故障时执行进程恢复,负责清理内存内存和释放该进程所使用的资源。

1)、恢复用户进程
2)、释放所有当前挂起的锁定。
3)、释放故障进程使用的资源。

4)检查进程,重启已死进程

5. CKPT进程

CKPT(CheckPoint,检查点)进程出现时,系统对全部数据库文件及控制文件的文件头的同步号进行修改,以保证数据库的同步。

1)、为了防止实例崩溃,为了尽快进行实例恢复的进程。
2)、检查点包括两种:完全检查点、增量检查点。
3)、完全检查点只有下面两种情况下被触发:
1,用户发出alter system checkpoint;
2,除了shutdown abort以外的其他方式正常关闭数据库。

6.ARCH进程

该进程将已填满的在线日志文件拷贝到指定的存储设备。当日志是为ARCHIVELOG使用方式、并可自动地归档时ARCH进程才存在。









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值