Oracle常用进程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle常⽤进程
PMON
PMON,进程监视。

PMON主要有3个⽤途:
1,在进程⾮正常中断后,做清理⼯作。

例如:dedicated server失败了或者因为⼀些原因被杀死,这是PMON的⼯作分两种。

第⼀,是对dedicated server所做的⼯作进⾏恢复或撤销。

第⼆:是释放dedicated server占⽤的资源。

PMON会把失败进程的未提交的⼯作进⾏rollback,释放锁,释放SGA空间
2,在进程abort后,PMON进⾏清理⼯作。

PMON会监视oracle其他的后台进程,并在需要的时候对它们进⾏重建。

如果shared server或者dispatcher失败后,PMON会介⼊其中,并在清理完失败进程后,重建⼀个shared server或dispatcher。

例如:在数据库进⾏写⽇志的时候LGWR进程失败,这是个很严重的错误。

解决这种问题最安全的⽅法是⽴即中断实例,并恢复。

3,PMON的第三个⽤途是,向Oracle TNS listener注册实例信息。

在实例启动的时候,PMON会查询oracle的默认端⼝(1521端⼝)是否处于⼯作状态。

如果这个端⼝已经处于⼯作状态,那么该实例就可以启动,PMON把实例的相关信息告诉listener,包括服务名、实例的信息等。

如果listener没有启动,PMON就会定期的尝试去连接listener。

这⾥要注意如果oracle没有是默认的1521端⼝,⽽是使⽤其他的端⼝时,PMON和listener的连接过程和使⽤1521端⼝还是很相似的,除了,在使⽤⾮默认端⼝时,listener的地址要在参数LOCAL_LISTENER 中指定。

SMON
SMON,系统监视。

SMON的⼯作如下:
1,清理临时空间。

2,聚合空闲空间。

如果使⽤dictionary-managed ⽅式来管理表空间,SMON就要负责把空闲的extent聚合成⼤的空闲extent。

这种情况只有在表空间的管理⽅式是dictionary-managed ,且参数PCTINCREASE被设置成⾮零值的时候才会发⽣。

3,对不可⽤⽂件的事务恢复。

在数据库启动的时候,SMON会恢复失败的事务,这些事务是在实例恢复或crash恢复的时候被跳过的。

例如:在磁盘上某哥⽂件不可⽤了,在这个⽂件⼜重新可⽤后,SMON会恢复它。

4,在RAC的单节点故障上进⾏实例恢复。

在RAC 环境下,如果cluster(簇群)中有⼀个实例失败了(如:实例所在的机器挂掉了),在这个cluster上的其他的节点会打开失败实例的redo log,并恢复失败实例
5,清理OBJ$。

OBJ$是个低级别的数据字典,它⼏乎包含了数据库中所有的objects的entry。

多数时候,有的entries的objects已经被删除了,或者当前的entry代表的不再是最新的objects。

SMON就负责删除这些entry信息了
6,收缩undo segments。

SMON会⾃动把rollback segment收缩到最优的⼤⼩
7,离线rollback segments。

DBA可能需要把⼀个处于active状态的事务的rollback segment离线。

此时如果事务正在使⽤这个已经离线的rollback segment,那么这个segment并未真的离线,⽽是被标记为“pending offline"。

在后台,SMON会⼀直尝试离线这个segment,直到成功。

此外,SMON还会刷新视图DBA_TAB_MONITORING的统计信息等。

SMON会消耗⼤量的CPU。

SMON会定期地,或被其他后台进程唤醒,来执⾏清理⼯作。

CKPT
CKPT,检查点进程。

CKPT进程并不像它的名字说的那样进⾏checkpoint,执⾏checkpoint是DBWn的⼯作。

它只是来更新数据⽂件头的。

oracle8.0之前,CKPT只是⼀个可选的进程。

但oracle8.0之后,CKPT进程就进程被打开。

过去更新数据⽂件头的checkpoint 信息是LGWR 的⼯作,然⽽,随着数据库⽂件的增加,LGWR的负担也变得越来越重。

如果LGWR要更新100,甚⾄1000哥⽂件头,那么就会有很多的session等待很长时间去commit。

所有CKPT就把这个⼯作承担下来了
DBWn
DBWn,数据写进程。

DBWn负责把缓冲区的脏数据写到磁盘上。

在oracle发⽣switch log files的时候,会发⽣checkpoint。

checkpoint发⽣后,在redo log中的数据就可以被覆盖了。

如果在redo log被填满,且要重新利⽤redo log 来存放新的数据时,⽽此时checkpoint还为完
成,oracle就会返回”checkpoint not complete“。

DBWn的性能相当重要。

如果DBWn写数据的速度不够快,这样释放出空闲buffer的速度也就不会快。

那么Free Buffer Waits 和Write Complete Waits的值就会很快的增长。

oracle可以配置多达36个DBW进程。

从DBW0到DBW35.多数系统只有⼀个DBW进程,但在多CPU系统中就可能不⽌⼀个DBW进程了。

这样做的⽬的是分散写数据的负担,保证SGA中有⾜够的空闲空间。

优化情况下,DBW是通过异步(asynchronous)I/O向磁盘写数据的。

通过异步I/O,DBW先把blocks组成⼀个batch(⼀捆),再把batch递交给OS,DBW不会等待OS把batch写⼊到磁盘,⽽是返回,继续收集下⼀个batch。

当OS完成写后,会异步通知DBW进程,已经把batch 成功的写⼊到磁盘了。

最后,DBW进程是分散地把数据写到磁盘上的。

⽽LGWR是连续写redo log。

分散写要⽐连续写耗时的多。

但是,DBW是在后台进⾏分散写的,⽽LGWR做连续写是为了减少⽤户等待的时间。

疑问:TOM说DBWn是把blocks组成⼀个batch,然后异步交给OS,让OS写到磁盘的。

为啥⼜说DBWn是分散写数据的,写数据的活不是OS⼲的吗?
LGWR
LGWR,⽇志写进程。

LGWR是把SGA中redo log buffer的信息写到redo log file的进程。

LGWR会在下⾯情况发⽣:
1,每个3秒钟,进⾏⼀次LGWR
2,任何事务进⾏了commit
3,当redo log buffer是1/3满,或者⾥⾯有1MB的数据
基于以上的原因,把redo log buffer设置的很⼤就没必要的。

ARCn
ARCn,归档进程。

ARCn的⼯作是在LGWR把onlone redo log填满后,ARCn把redo log file的内容copy到其他的地⽅。

归档⽇志可以⽤来做media recovery。

online redo log 是被⽤来为实例失败的时候,恢复数据⽂件。

⽽归档⽇志是被⽤来在media recovery的时候,恢复数据⽂件。

相关文档
最新文档